Android笔记 - RecyclerView

本文详细介绍了如何在Android中使用RecyclerView,包括Adapter的创建、ViewHolder内部类、Adapter的构造器和重载方法,以及如何在Activity或Fragment中设置RecyclerView的布局管理器和数据源。

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

RecyclerView

Adapter

Adapter是数据适配器,用来给Recyclerview填充数据的。可以一个Adapter对应一个Recyclerview,也可以一个Adapater对应多个Recyclerview。

步骤:

  • 自己实现一个XXXAdapter,extends自 RecyclerView.Adapte<>,泛型为一个ViewHolder内部类。
public class ExchangeListAdapter extends RecyclerView.Adapter<ExchangeListAdapter.VH>

ViewHolder内部类

在ViewHolder内部类的构造器中进行绑定视图的操作,并把自定义的VH填入父级Adapter的泛型参数中。

步骤:

  • 自己实现一个VH,extends自RecyclerView.ViewHolder。
 public static class VH extends RecyclerView.ViewHolder{
        public final TextView Title;
        public final TextView Current;
        public final ImageView Pic;
        public VH(View v){
            super(v);
            Title = (TextView)v.findViewById(R.id.List_Title);
            Current = (TextView)v.findViewById(R.id.List_Current);
            Pic = v.findViewById(R.id.List_Pic);

        }
    }
  • 在构造器中绑定需要用到的Title、Pic等视图元素。

Adapter的构造器

Adapter的默认构造器可以从外部传入需要的数据,并设置到Adapter的变量中(通常是ArrayList)

 private List<String> TitleArray;
    private List<String> CurrentArray;

    public ExchangeListAdapter(List<String> data1,List<String> data2){
        this.TitleArray = data1;
        this.CurrentArray = data2;
    }

需要重载的方法

  • onBindViewHolder(VH vh,int i)

    用实际的数据组(ArrayList等)对Recyclerview的UI进行操作

     @Override
        public void onBindViewHolder(@NonNull VH vh, int i) {
            vh.Title.setText(TitleArray.get(i));
            vh.Current.setText(CurrentArray.get(i));
            switch (i){
                case 0:vh.Pic.setImageResource(R.drawable.cny);
                break;
                case 1:vh.Pic.setImageResource(R.drawable.usd);
                    break;
                case 2:vh.Pic.setImageResource(R.drawable.hkd);
                    break;
                case 3:vh.Pic.setImageResource(R.drawable.eur);
                    break;
                case 4:vh.Pic.setImageResource(R.drawable.jpy);
                    break;
                case 5:vh.Pic.setImageResource(R.drawable.gbp);
                    break;
                case 6:vh.Pic.setImageResource(R.drawable.krw);
                    break;
                case 7:vh.Pic.setImageResource(R.drawable.cad);
                    break;
                case 8:vh.Pic.setImageResource(R.drawable.aud);
                    break;
                case 9:vh.Pic.setImageResource(R.drawable.twd);
                    break;
            }
    
    
        }
    
  • getItemCount()

    返回Recyclerview的数据总数

     @Override
        public int getItemCount() {
            return TitleArray.size();
        }
    
  • onCreateViewHolder(ViewGroup viewGroup,int i)

    选择Recyclerview的布局文件,并传入这个文件到ViewHolder的构造器中。

     @Override
        public VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.exchange_list,viewGroup,false);
            return new VH(v);
        }
    }
    

Recyclerview元素布局文件

这是一个xml文件,部署在layout目录中,一般是一个Linerlayout或者Relativelayout,代表Recyclerview中的一行。可以使用margin属性控制Recyclerview的每行高度。

<RelativeLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
        <ImageView
            android:layout_width="21dp"
            android:layout_height="21dp"
            android:layout_alignBottom="@id/List_Title"
            android:id="@+id/List_Pic"/>
        <TextView
            android:layout_toRightOf="@id/List_Pic"
            android:layout_marginLeft="4dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/List_Title"
            android:textStyle="bold"
            android:textSize="16sp"
            android:text="hello"
            android:layout_margin="4dp"/>
        <TextView
            android:layout_marginLeft="210dp"
            android:layout_marginBottom="4dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="4dp"
            android:textSize="16sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/List_Current"
            android:text="world"/>
</RelativeLayout>

Activity或者Fragment中调用Recyclerview

主要步骤:

  • 绑定Recyclerview

  • 设置布局管理器LayoutManager

  • new一个Adapter并设置

  • 设置装饰器(可选)

     recyclerView = v.findViewById(R.id.recycler_view);
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
     ExchangeListAdapter exchangeListAdapter = new ExchangeListAdapter(Title, Current);
     recyclerView.setAdapter(exchangeListAdapter);
     recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值