简单的Android RecyclerView示例

我已经使用Android的RecyclerView多次列出了一些项目,但这是一个相当复杂的过程。 通过网上作品( 这个 , 这个 , 这是很好的)众多的教程之一,但我正在寻找一个裸骨头的例子,我可以复制和粘贴起来,并迅速运行。 只有以下function是必要的:

  • 垂直布局
  • 每行一个TextView
  • 响应点击事件

因为我已经多次希望了,所以最后我决定回答下面的问题,以供我将来参考。

以下是一个简单的例子,看起来像下面的图片。

在这里输入图像描述

开始一个空的活动。 您将执行以下任务来添加RecyclerView。 所有你需要做的是复制和粘贴每个部分的代码。 稍后,您可以对其进行定制以适应您的需求。

  • 添加依赖到gradle
  • 为活动和RecyclerView行添加xml布局文件
  • 制作RecyclerView适配器
  • 在您的活动中初始化RecyclerView

更新Gradle依赖关系

确保以下依赖关系在您的应用程序gradle.build文件中:

 compile 'com.android.support:appcompat-v7:25.1.1' compile 'com.android.support:recyclerview-v7:25.1.1' 

您可以将版本号更新为最新的版本号。

创build活动布局

RecyclerView添加到您的xml布局。

activity_main.xml中

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rvAnimals" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout> 

创build行布局

我们的RecyclerView每一行都只有一个TextView 。 创build一个新的布局资源文件。

recyclerview_row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:id="@+id/tvAnimalName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp"/> </LinearLayout> 

创build适配器

RecyclerView需要一个适配器来填充数据每行的视图。 创build一个新的java文件。

MyRecyclerViewAdapter.java

 public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> { private List<String> mData = Collections.emptyList(); private LayoutInflater mInflater; private ItemClickListener mClickListener; // data is passed into the constructor public MyRecyclerViewAdapter(Context context, List<String> data) { this.mInflater = LayoutInflater.from(context); this.mData = data; } // inflates the row layout from xml when needed @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.recyclerview_row, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } // binds the data to the textview in each row @Override public void onBindViewHolder(ViewHolder holder, int position) { String animal = mData.get(position); holder.myTextView.setText(animal); } // total number of rows @Override public int getItemCount() { return mData.size(); } // stores and recycles views as they are scrolled off screen public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView myTextView; public ViewHolder(View itemView) { super(itemView); myTextView = (TextView) itemView.findViewById(R.id.tvAnimalName); itemView.setOnClickListener(this); } @Override public void onClick(View view) { if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); } } // convenience method for getting data at click position public String getItem(int id) { return mData.get(id); } // allows clicks events to be caught public void setClickListener(ItemClickListener itemClickListener) { this.mClickListener = itemClickListener; } // parent activity will implement this method to respond to click events public interface ItemClickListener { void onItemClick(View view, int position); } } 

笔记

  • 虽然不是绝对必要的,但是我还包括了监听行上的点击事件的function。 这在旧的ListViews是可用的,并且是一个常见的需求。 如果你不需要,你可以删除这段代码。

在Activity中初始化RecyclerView

将以下代码添加到您的主要活动中。

MainActivity.java

 public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener { MyRecyclerViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // data to populate the RecyclerView with ArrayList<String> animalNames = new ArrayList<>(); animalNames.add("Horse"); animalNames.add("Cow"); animalNames.add("Camel"); animalNames.add("Sheep"); animalNames.add("Goat"); // set up the RecyclerView RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvAnimals); recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new MyRecyclerViewAdapter(this, animalNames); adapter.setClickListener(this); recyclerView.setAdapter(adapter); } @Override public void onItemClick(View view, int position) { Toast.makeText(this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show(); } } 

笔记

  • 请注意,该活动实现了我们在适配器中定义的ItemClickListener 。 这使我们能够处理onItemClick行单击事件。

成品

而已。 你现在应该可以运行你的项目,并得到类似于顶部图像的东西。

继续

在行之间添加分隔符

你可以像这样添加一个简单的分隔线

 DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), layoutManager.getOrientation()); recyclerView.addItemDecoration(dividerItemDecoration); 

如果你想要一些更复杂的东西,请看下面的答案:

  • 如何在RecyclerView中的项目之间添加分隔符和空格?
  • 如何以线性布局缩进分隔线RecyclerView(即,仅向ItemDecoration添加填充,边距或内插)

点击更改行颜色

  • Android涟漪效应 (SlideNerd YouTube教程)

进一步阅读

  • 代码path
  • YouTube教程
  • Android RecyclerView示例 (stacktips教程)