Android-RecyclerView 实现步骤

本文详细介绍如何使用RecyclerView替代ListView实现更高效的数据展示。包括添加依赖、自定义布局、创建Adapter及ViewHolder,并展示了如何在Activity和Fragment中初始化RecyclerView。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RecyclerView与listView类似,也有adapter

1)添加v7类库

2) 视图中添加RecyclerView控件

<android.support.v7.widget.RecyclerView

    android:id="@+id/rv"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

3) 新建list_cell.xml 自定义样式
如下: 一个ImageView 和一个TextView

<?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="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/ivTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp" />

    <TextView
        android:id="@+id/tvContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />

</LinearLayout>

4) 建立Data类

public class Titles {


    private int ivTitleSrc;
    private String tvTitle;

    public Titles(int ivTitleSrc,String tvTitle){
        this.ivTitleSrc = ivTitleSrc;
        this.tvTitle = tvTitle;
    }

    public int getIvTitle() {
        return ivTitleSrc;
    }

    public String getTvContent() {
        return tvTitle;
    }
}

5) 建立MyAdapter继承RecyclerView.Adapter, 并创建内部类ViewHolder, 在ViewHolder中实现对布局文件的实例化.
在onBindViewHolder()中实现对数据的赋值; 在onCreateViewHolder中创建布局; getItemCount()中返回view item的数量.

public class myAdapter extends RecyclerView.Adapter{


    class ViewHolder extends RecyclerView.ViewHolder{

        private View root;
        private ImageView imageView;
        private TextView textView;

        public ViewHolder(View root) {
            super(root);

            imageView = (ImageView) root.findViewById(R.id.ivTitle);
            textView = (TextView) root.findViewById(R.id.tvContent);
        }

        public ImageView getImageView() {
            return imageView;
        }

        public TextView getTextView() {
            return textView;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));//创建布局
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ViewHolder vh = (ViewHolder) holder;

        Titles title = titles[position];
        Log.d("title : ",title.toString());
        vh.getImageView().setImageResource(title.getIvTitle());
        vh.getTextView().setText(title.getTvContent().toString());

    }

    @Override
    public int getItemCount() {
        return titles.length;
    }

    private Titles[] titles = new Titles[]{
            new Titles(R.drawable.order_status_money_icon,"费用"),
            new Titles(R.drawable.order_status_rider_icon,"订单"),
            new Titles(R.drawable.order_status_service_icon,"服务"),
            new Titles(R.drawable.order_status_shop_icon,"商店"),
            new Titles(R.drawable.order_status_user_icon,"用户"),
            new Titles(R.drawable.order_status_money_icon,"费用"),
            new Titles(R.drawable.order_status_rider_icon,"订单"),
            new Titles(R.drawable.order_status_service_icon,"服务"),
            new Titles(R.drawable.order_status_shop_icon,"商店"),
            new Titles(R.drawable.order_status_user_icon,"用户"),
            new Titles(R.drawable.order_status_money_icon,"费用"),
            new Titles(R.drawable.order_status_rider_icon,"订单"),
            new Titles(R.drawable.order_status_service_icon,"服务"),
            new Titles(R.drawable.order_status_shop_icon,"商店"),
            new Titles(R.drawable.order_status_user_icon,"用户"),
    };
}

6) MainActivity onCreate()中实例化RecyclerView(注意一定要定义一个布局管理器,否则界面不显示)

@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    rv = (RecyclerView) findViewById(R.id.rv);

    rv.setLayoutManager(new GridLayoutManager(this,4));

    myAdapter adapter = new myAdapter();
    rv.setAdapter(adapter);

}

Fragment onCreateView()中实例化RecyclerView

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    View root = inflater.inflate(R.layout.home_page_fragment, container, false);

    rv = (RecyclerView) root.findViewById(R.id.rv);
    rv.setLayoutManager(new GridLayoutManager(getContext(), 4));

    MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter();

    rv.setAdapter(adapter);

    return root;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

githan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值