Android安卓 RecyclerView 简单实现 超详细解释!!!

RecyclerView:优于ListView的一个List显示工具,较ListView复杂一些,但是代码套路比较固化。RecyclerView有三种模式,ListView(列表形式),StaggeredView(瀑布形式),GridView(表格形式)这里先用ListView做一个简单的阐述,之后再细说三种形式其实三种形式大致相同共通性强

使用步骤: 定义并设置Adapter适配器,定义设置LayoutManager布局管理器。

使用准备:设置 itemViewLayout 和 mainlayout 以及数据和一个 项目单位类 此处使用listView简单阐述

itemView如下效果
在这里插入图片描述

mainlayout如下效果
在这里插入图片描述

数据(略)

单位项目类

package com.example.recyclerviewreview;

import android.widget.TextView;

public class Sample {

    private String tv_name;
    private String tv_content;
    private int icon;

    public String getTv_name() {return tv_name;}
    public void setTv_name(String tv_name) {this.tv_name = tv_name;}
    public String getTv_content() {return tv_content;}
    public void setTv_content(String tv_content) {this.tv_content = tv_content;}
    public int getIcon() {return icon;}
    public void setIcon(int icon) {this.icon = icon;}
}


一、创建Adapter(需要一个新的类)

每一个RecyclerView都需要一个适配器,适配器的作用便是把数据和布局联系在一起,当然Adapter的设置也是RecyclerView的重点

package com.example.recyclerviewreview;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListHolder> {

    TextView tv_name;           
    TextView tv_content;
    ImageView iv_icon;
    List<Sample> sampleList; 
    
    //定义Adapter首先需要一个ViewHolder(用来装布局控件,连接布局控件的容器)这里定义的ListHolder继承自ViewHolder需要把ItemLayout里的控件连接到         ListHolder用id的方式连接,放入ViewHolder里
     class ListHolder extends RecyclerView.ViewHolder {
        public ListHolder(@NonNull View itemView) {
            super(itemView);
            tv_name = itemView.findViewById(R.id.list_name);
            tv_content = itemView.findViewById(R.id.list_content);
            iv_icon = itemView.findViewById(R.id.list_icon);
        }
         
    
    //构造函数,通过List<Sample>来把参数传入ListAdapter这也是ListAdapter唯一接受外来数据的方法
    public ListAdapter(List<Sample> sampleList) {
        this.sampleList = sampleList;
    }

   

    //完成自定义Adapter的三个自带函数 1、onCreateViewHolder(@NonNull ViewGroup parent, int viewType)这个函数用来创建ListAdapter所需的           ViewHolder 首先用inflate方法解析布局,把整个布局传入,再通过ViewHolder把这个布局里的每个控件设置进来
    @NonNull
    @Override
    public ListHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View sampleview = View.inflate(parent.getContext(),R.layout.layout_list,null);
        ListHolder listHolder = new ListHolder(sampleview);
        return listHolder;
    }
         
         
         
    //完成自定义Adapter的三个自带函数 2、onBindViewHolder(@NonNull ListHolder holder, int position)这个函数用来设置布局控件应该放单位项目类         中的哪些数据,通过position获取此时的数据列表位置之后再定义一个setData函数来设置布局里的各个控件应该与单位项目类的哪些数据相连接
    @Override
    public void onBindViewHolder(@NonNull ListHolder holder, int position) {
        holder.setData(sampleList.get(position));
    }
    //可以看到这里给每个控件设置对应的项目数据
    public void setData(Sample sample) {
        tv_content.setText(sample.getTv_content());
        tv_name.setText(sample.getTv_name());
        iv_icon.setImageResource(sample.getIcon());
    }

         
         
         
    //完成自定义Adapter的三个自带函数 3、getItemCount() 这个参数旨在传递数据列表大小较为简单直接返回size即可
    @Override
    public int getItemCount() {
        if (sampleList != null) {
            return sampleList.size();
        }
        return 0;
    }

    

       
    }
}

二、设置layoutManager和自定义的ListAdapter

**ListView的LayoutManager采用LinearLayoutManager **

StaggeredView的LayoutManager采用StaggeredGridManager

GridView的LayoutManager采用GridLayoutManager

ListAdapter listAdapter = new ListAdapter(sampleList);
LinearLayoutManager layoutManager = new LinearLayoutManager(null);
recyclerView.setAdapter(listAdapter);
recyclerView.setLayoutManager(layoutManager);
三、设置数据(数据导入单位项目类)
private void initData() {
    sampleList = new ArrayList<>();
    for (int i=0 ; i<Datas.content.length ; i++) {
        Sample sample = new Sample();
        sample.setIcon(Datas.icons[i]);
        sample.setTv_content(Datas.content[i]);
        sample.setTv_name(Datas.names[i]);
        sampleList.add(sample);
    }
}

这样整个recyclerView就设置完毕了

效果如图:
在这里插入图片描述

总结:实际上整个RecyclerView的重点和代码量在于自定义的Adapter类。

而完成Adapter类的重点:

1.在自定义的Adapter里定义一个自定义的ViewHolder用来存放控件
2.重写三个Adapter的三个自带的函数(通过选择错误alt+enter提示调出)
3.一定要写自定义的Adapter的构造函数,否则数据无法从主函数中调入到Adapter中,整个Recycler就会错误

其他注意事项:

1.数据数量要相同,相对于,否则会报错
2.一定要记得设置导入数据的方法
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值