以下是最小示例,如下图所示.
从空活动开始.您将执行以下任务以添加RecyclerView.您需要做的就是复制并粘贴每个部分中的代码.稍后您可以自定义它以满足您的需求.
>将依赖项添加到gradle
>为活动和RecyclerView行添加xml布局文件
>制作RecyclerView适配器
>在您的活动中初始化RecyclerView
更新Gradle依赖项
确保您的app gradle.build文件中包含以下依赖项:
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
您可以将版本号更新为the most current.如果您仍在使用Android Studio 2.x,请使用编译而不是实现.
创建活动布局
将RecyclerView添加到xml布局中.
activity_main.xml中
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/rvAnimals"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
创建行布局
我们的RecyclerView中的每一行只有一个TextView.创建一个新的布局资源文件.
recyclerview_row.xml
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">
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
创建适配器
RecyclerView需要一个适配器来填充每行中包含数据的视图.创建一个新的java文件.
MyRecyclerViewAdapter.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter {
private List mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
MyRecyclerViewAdapter(Context context, List 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);
return new ViewHolder(view);
}
// 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 {
TextView myTextView;
ViewHolder(View itemView) {
super(itemView);
myTextView = 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
String getItem(int id) {
return mData.get(id);
}
// allows clicks events to be caught
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);
}
}
笔记
>虽然不是绝对必要,但我包含了在行上侦听点击事件的功能.这在旧的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 animalNames = new ArrayList<>();
animalNames.add("Horse");
animalNames.add("Cow");
animalNames.add("Camel");
animalNames.add("Sheep");
animalNames.add("Goat");
// set up the 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);
如果您想要更复杂的东西,请参阅以下答案:
单击时更改行颜色
有关如何更改背景颜色并在单击行时添加“波纹效果”,请参阅this answer.
更新行
有关如何添加,删除和更新行的信息,请参阅this answer.
进一步阅读