效果图:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rcl_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
</LinearLayout>
ly_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal"
tools:context=".MainActivity">
<ImageView
android:id="@+id/img_view"
android:layout_width="100dp"
android:layout_height="100dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="40dp"
android:textSize="15dp"
android:text="你好"
/>
<TextView
android:id="@+id/tv_info"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="10dp"
android:layout_marginLeft="40dp"
android:textSize="15dp"
android:text="你好"></TextView>
</LinearLayout>
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private List<CostBean> list = new ArrayList<>(); // 创建bean对象 —— 封装数据对象
private RecyclerView recyclerView; // 列表
private MyAdapter adapter; // 适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.rcl_list);
initData(); // 装配数据
adapter = new MyAdapter(this,list);
LinearLayoutManager layout = new LinearLayoutManager(this);
// 设置布局管理器
recyclerView.setLayoutManager(layout);
// 设置adapter
recyclerView.setAdapter(adapter);
// 设置item增加,移除动画
recyclerView.setItemAnimator(new DefaultItemAnimator());
// 添加分割线
recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
}
private void initData() {
CostBean one = new CostBean(R.mipmap.ic_yi,"一起来看流星雨","是我看的第一本爱情剧,也是我的青春");
list.add(one);
CostBean two = new CostBean(R.mipmap.ic_er,"斗罗大陆","是我现在最喜欢看的一本动漫");
list.add(two);
CostBean three = new CostBean(R.mipmap.ic_san,"神奇宝贝","是我童年最喜欢看的一本动画片");
list.add(three);
}
}
CostBean.java:
public class CostBean {
private int imgId;
private String name;
private String info;
public CostBean(int imgId, String name, String info) {
this.imgId = imgId;
this.name = name;
this.info = info;
}
public int getImgId() {
return imgId;
}
public String getName() {
return name;
}
public String getInfo() {
return info;
}
}
MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private List<CostBean> list;
public MyAdapter(@NonNull Context context, List<CostBean> list) {
this.context = context;
this.list = list;
}
/**
* 执行2
* 得到每一个item的布局 view
* 创建 Holder 对象,并返回
*/
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ly_item,viewGroup,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
/**
* 执行3
* 装配数据
*/
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
CostBean bean = list.get(i);
viewHolder.imageView.setImageResource(bean.getImgId());
viewHolder.title.setText(bean.getName());
viewHolder.content.setText(bean.getInfo());
}
@Override
public int getItemCount() {
return list.size();
}
/**
* 执行1
* 与 ListView 一样,为了节约资源,都要用到ViewHolder,不过 RecyclerView 提供了专属的内部类来对这些组件进行初始化操作
*/
public class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imageView;
public TextView title;
public TextView content;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.img_view);
title = itemView.findViewById(R.id.tv_name);
content = itemView.findViewById(R.id.tv_info);
}
}
}
点击运行即可~!
RecyclerView 在很多场景下都可以替代 ListView,RecylerView 本身封装了 ViewHolder、简化了适配过程,代码逻辑更加简洁。同时,它对列表显示与数据加载进行了解耦、提供了通过布局管理器控制布局效果的功能、提供了自定义分割线和增删动画等功能,具有非常强的扩展性,程序视线变得更加灵活。在项目开发中,列表显示优先推荐使用 RecylerView