前言
Android控件RecyclerView学习笔记
添加gradle依赖
1 2 3 4 5 6
| dependencies {
...
implementation 'androidx.recyclerview:recyclerview:1.1.0' }
|
添加RecyclerView控件
/app/src/main/res/layout/activity_main.xml
1 2 3 4 5 6 7 8 9 10
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView android:id="@+id/rv" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
|
创建一个Bean类
/app/src/main/java/…/Bean.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Bean {
private String name;
public Bean(String name) { this.name = name; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
|
自定义一个布局
- 创建一个布局
recycler_item.xml
,用于存放列表内的元素
/app/src/main/res/layout/recycler_item.xml
1 2 3 4 5 6 7 8 9 10
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
|
创建一个适配器类
- 创建一个适配器类,继承RecyclerView.Adapter类,用于把列表中元素放到列表中
/app/src/main/java/…/MyAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Bean> beans; private Context context;
public MyAdapter(List<Bean> beans, Context context) { this.beans = beans; this.context = context; }
@NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.recycler_item, null); return new MyViewHolder(view); }
@Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.textView.setText(beans.get(position).getName()); }
@Override public int getItemCount() { return beans==null ? 0 : beans.size(); }
public final class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.tv); } } }
|
实例化对象
- 在主类中创建列表元素对象,并通过自定义的适配器,将列表元素渲染到列表中
/app/src/main/java/…/MyActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class MainActivity extends AppCompatActivity {
private List<Bean> beans = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
beans.add(new Bean("文本内容")); ...
RecyclerView recyclerView = findViewById(R.id.rv);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager);
MyAdapter myAdapter = new MyAdapter(beans, this); recyclerView.setAdapter(myAdapter); } }
|
更多布局方式
线性布局
1 2 3
| LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager);
|
网格布局
<num>
:设置列数
1 2 3
| GridLayoutManager gridLayoutManager = new GridLayoutManager(this, <num>); recyclerView.setLayoutManager(gridLayoutManager);
|
瀑布流布局
<num>
:表示行或列的个数
1
:表示纵向瀑布流
1 2 3
| StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(<num>, 1); recyclerView.setLayoutManager(staggeredGridLayoutManager);
|
添加点击事件
/app/src/main/java/…/MyAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public final class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.tv);
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (onItemClickListener != null) { onItemClickListener.onRecyclerItemClick(getAdapterPosition()); } } }); } }
private OnRecyclerItemClickListener onItemClickListener;
public void setRecyclerItemClickListener(OnRecyclerItemClickListener listener) { onItemClickListener = listener; }
public interface OnRecyclerItemClickListener { void onRecyclerItemClick(int position); }
|
/app/src/main/java/…/MyActivity.java
position
:编号
1 2 3 4 5 6
| myAdapter.setRecyclerItemClickListener(new MyAdapter.OnRecyclerItemClickListener() { @Override public void onRecyclerItemClick(int position) { ... } });
|
完成
参考文献
哔哩哔哩——Android架构解析