添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
侠义非凡的哑铃  ·  VSCode C bool ...·  1 年前    · 

查到笔者的博客已经说明各位读者实在是找不到RecyclerView的简单教程了吧,笔者将提供最基本,最明朗的RecyclerView教程,要求读者有一点点编程经验:

  1. 添加依赖,依赖有很多种,请根据自己的软件版本添加,也可以不添加试试看哈
  2. 在布局文件(即.xml文件)中添加RecyclerView的控件,并设置id
  3. 创建RecyclerView的实例化
final RecyclerView recyclerView = (RecyclerView)findViewById(R.id.布局文件中的id);
//这句话可有可无,分情况用,菜鸟可以先加上
recyclerView.setLayoutManager(new LinearLayoutManager(this));

为RecyclerView传入信息

recyclerView.setAdapter(一个Adapter);

这里传入的Adapter(适配器)就像是一个信息的压缩包,为了弥补RecyclerView不能自己读取数据的缺陷——接下来就是解释如何自己写一个压缩包

向adapter里传数据
// 一个声明都能装的List,把装进去的东西都映射为String,到时候查询调用操作,直接根据String往外调用即可
final List<Map<String, Object>> listItems = new ArrayList<>();
// 往里塞东西了
for (int i=0; i<10; i++){
    Map<String, Object> tmp = new LinkedHashMap<>();
    tmp.put("东西A的name", 东西A);
    tmp.put("first_letter", 东西B);
    // 收敛东西集合
    listItems.add(tmp);
// 东西有了,在界面上如何摆放
final CommonAdapter adapter = new CommonAdapter<Map<String, Object>>(this, listItems, R.layout.摆放方法(即layout里的.xml文件)) {
    // 获得控件,并为控件传入数据
    @Override
    public void convert(ViewHolder holder, Map<String, Object> s) {
        TextView 控件 = holder.getView(R.id.控件的id);
            // s.get("东西A的name"),通过之前映射的名字获得数据无论类型
            控件.setText(s.get("name").toString());
自定义的adapter

1.在MainActivity.java同目录下新建立一个java文件,表示你要写的Adapter
2.写Adapter
时间紧迫,我就直接用中文在代码内部解释了,需要复制的话把中文都删除谢谢——建议先不写点击函数的功能,先把界面搭出来

首先要继承一个原来的Adapter的类,否则需要多写很多东西
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder>{
    private Context mContext;
    private int mLayoutid;
    private List<T> mDatas;
    private OnItemClickListener monItemClickListener=null;
初始化函数,正是传入数据的函数,届时数据就从List<T>中传入
    public CommonAdapter(Context context, List<T> datas, int layoutid){
        this.mContext = context;
        this.mLayoutid = layoutid;
        this.mDatas = datas;
这里需要一个自定义的ViewHoder,先写,再说
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        ViewHolder viewHolder = ViewHolder.get(mContext, parent, mLayoutid);
        return viewHolder;
为了设置点击的效果
不点击可以不写,保留内部为空即可,声明还是要有的 
有一个陌生的函数,convert——后面会写,
    @Override
    public void onBindViewHolder(final ViewHolder holder, int position){
        convert(holder, mDatas.get(position));
        if(monItemClickListener != null){
            holder.itemView.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    monItemClickListener.onClick(holder.getAdapterPosition());
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener(){
                @Override
                public boolean onLongClick(View v) {
                    monItemClickListener.onLongClick(holder.getAdapterPosition());
                    return true;
    @Override
    public int getItemCount(){
        return mDatas.size();
    public abstract void convert(ViewHolder holder, T position);
点击函数,不点击可以不写
    public interface OnItemClickListener{
        void onClick(int position);
        void onLongClick(int position);
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        monItemClickListener = onItemClickListener;
    public void removeItem(int position){
        if(position >= 0){
            mDatas.remove(position);
            notifyItemRemoved(position);

3.之前说的ViewHolder,最好写上,因为我们在传入数据的时候,需要内部的一个函数get

public class ViewHolder extends RecyclerView.ViewHolder {
    private SparseArray<View> mViews;
    private View mConvertView;
    public ViewHolder(Context context, View itemview, ViewGroup parent){
        super(itemview);
        mConvertView = itemview;
        mViews = new SparseArray<View>();
    public static ViewHolder get(Context context, ViewGroup parent, int layoutid){
        View itemview = LayoutInflater.from(context).inflate(layoutid, parent, false);
        ViewHolder holder = new ViewHolder(context, itemview, parent);
        return holder;
    public <T extends View> T getView(int viewid){
        View view = mViews.get(viewid);
        if(view == null){
            view = mConvertView.findViewById(viewid);
            mViews.put(viewid, view);
        return (T)view;

方法就介绍到这里,源代码可以贴上来,详见GitHub
https://github.com/AllLiving/Android_lab/tree/master/Shopping

查到笔者的博客已经说明各位读者实在是找不到RecyclerView的简单教程了吧,笔者将提供最基本,最明朗的RecyclerView教程,要求读者有一点点编程经验:添加依赖,依赖有很多种,请根据自己的软件版本添加,也可以不添加试试看哈在布局文件(即.xml文件)中添加RecyclerView的控件,并设置id创建RecyclerView的实例化final RecyclerView recyc
在Android开发中,会经常用到RecyclerView来显示数据,数据的绑定使用到Adapter,原声的Adapter需要些很多重复代码,今天写了一个通用的代码来实现适配器绑定数据,减少代码量。 通用Adapter的功能: 1、FooterView和headerView的显示 2、停止滚动屏幕,再去加载数据 下面是代码的详解: 1、通用的ViewHolderpublic class R
布局文件 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/ap 想要添加headerView需通过自定义RecyclerView.Adapter,并通过控制Adapter的itemType来实现,在在此之前你需要有基本的自定义Adapter的基础。 本文通过俩个步骤来学习如何为Adapter添加一个HeaderView。 简单的过下RecyclerView设计思想,分清其中各个角色关系(了解过的可以跳过这一步)。 学习自定义Adapter的基... Python numpy Import Error Something is wrong with the numpy installation. an older 金焱111: python安装目录下的libs文件夹中没有dll文件