RecyclerView万能适配器

RecyclerView万能适配器

  • 一:BaseRecyclerViewAdapterHelper介绍
    • 配置
  • 二:使用方法
    • 1,单类型BaseQuickAdapter使用
    • 多类型BaseMultiItemQuickAdapter的用法:
  • 三:万能适配器

一:BaseRecyclerViewAdapterHelper介绍

BaseRecyclerViewAdapterHelper是Github上为实现方便使用RecyclerView而开发的一个框架,使用较为简单方便,
能实现RecyclerView的下拉加载,Item点击事件,Item子控件的点击事件,Item加载动画等等
该适配器虽号称万能适配器,但并非万能,有很多功能本身是实现不了的,还会和其他开源的冲突,比如不能和XRecyclerView一起使用

配置

在 build.gradle 的 repositories 添加:

     allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

然后在Module的 build.gradle(Module:app) 的 dependencies 添加:

implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.9.7'

二:使用方法

1,单类型BaseQuickAdapter使用

RecyclerView万能适配器_第1张图片
适配器

public class MyQuickAdapter extends BaseQuickAdapter {

    private int layoutId;
    private List list;

    public MyQuickAdapter(int layoutId,List list){
        super(layoutId,list);
        this.layoutId = layoutId;
        this.list = list;
    }

    @Override
    protected void convert(BaseViewHolder baseViewHolder, String s) {
        //holder里有控件 showText
        baseViewHolder.setText(R.id.title_id,s);
    }
}

Activity

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerViewId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerViewId = (RecyclerView) findViewById(R.id.recyclerView_id);
        //线性
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(RecyclerView.VERTICAL);
        recyclerViewId.setLayoutManager(manager);

        List list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add("蜡笔小新"+i);
        }

        MyQuickAdapter myQuickAdapter = new MyQuickAdapter(R.layout.item_layout, list);
        recyclerViewId.setAdapter(myQuickAdapter);

    }
}

多类型BaseMultiItemQuickAdapter的用法:

RecyclerView万能适配器_第2张图片

public class RVAdapter extends RecyclerView.Adapter {

    ArrayList datas;

    public RVAdapter(ArrayList datas) {
        this.datas = datas;
    }

    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0){//偶数返回0
            return 0;
        }else {
            return 1;
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == 0){
            return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout,parent,false));
        }else {
            return new MyHolder2(LayoutInflater.from(parent.getContext()).inflate(R.layout.item2_layout,parent,false));
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (getItemViewType(position) == 0){
            MyHolder holder1 = (MyHolder) holder;
            holder1.textView.setText(datas.get(position).getTitle());
            holder1.imageView.setImageResource(datas.get(position).getImageId());
        }else {
            MyHolder2 holder2 = (MyHolder2) holder;
            holder2.textView.setText(datas.get(position).getTitle());
            holder2.imageView.setImageResource(datas.get(position).getImageId());
        }
    }

    @Override
    public int getItemCount() {
        return datas.size();
    }

    class MyHolder extends RecyclerView.ViewHolder{

        TextView textView;
        ImageView imageView;
        public MyHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.title1_id);
            imageView = itemView.findViewById(R.id.image1_id);
        }
    }

    class MyHolder2 extends RecyclerView.ViewHolder{

        ImageView imageView;
        TextView textView;
        public MyHolder2(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.title2_id);
            imageView = itemView.findViewById(R.id.image2_id);
        }
    }
}

三:万能适配器

package com.example.wangnengadapter;

import android.util.SparseArray;
import android.view.View;

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

//万能适配器的Hodler对象
public class BaseHodler extends RecyclerView.ViewHolder {

    //省内存    用来存杭布局的控件
    SparseArray viewSparseArray = new SparseArray<>();//效率高的集合

    View textView;

    public BaseHodler(@NonNull View itemView) {
        super(itemView);
    }

    //从容器中取控件
    public View getView(int id){
        View view = null;
        view = viewSparseArray.get(id);//从集合中根据id取控件
        if (view == null){ //容器中没有这个控件
            view = itemView.findViewById(id);//集合中没有去itemView找
            viewSparseArray.put(id,view);
        }
            return view;
    }
}

万能适配器

package com.example.wangnengadapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

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

import java.util.List;

public abstract class BaseAdapter extends RecyclerView.Adapter {

    Context context;//上下文
    List data;//数据源

    public BaseAdapter(Context context, List data) {
        this.context = context;
        this.data = data;
    }

    //XXX.xml
    public abstract int getLayout(); //抽象,必须让子类重写,重写的时候给我一个具体的布局的id,item_layout.xml

    @NonNull
    @Override
    public BaseHodler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(getLayout(),null);
        return new BaseHodler(v);
    }

    @Override
    public void onBindViewHolder(@NonNull BaseHodler holder, int position) {
        bangding(holder,position);
    }

    public abstract void bangding(BaseHodler holder, int position);

    @Override
    public int getItemCount() {
        return data.size();
    }
}

Acitivity代码

package com.example.wangnengadapter;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private RecyclerView recyclersId;

    @SuppressLint("WrongConstant")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclersId = (RecyclerView) findViewById(R.id.recyclers_id);


        //瀑布流布局
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclersId.setLayoutManager(staggeredGridLayoutManager);
        List list = new ArrayList<>();
        list.add(R.mipmap.yi);
        list.add(R.mipmap.er);
        list.add(R.mipmap.san);
        list.add(R.mipmap.si);
        list.add(R.mipmap.wu);
        list.add(R.mipmap.liu);
        FirstAdaoter firstAdaoter = new FirstAdaoter(MainActivity.this, list);
        recyclersId.setAdapter(firstAdaoter);

//        //线性布局
//        LinearLayoutManager manager = new LinearLayoutManager(this);
//        manager.setOrientation(LinearLayoutManager.VERTICAL);
//        recyclersId.setLayoutManager(manager);
//        List list1 = new ArrayList<>();
//        for (int i = 0; i < 20; i++) {
//            list1.add("哪吒"+i);
//        }
//        SecondAdapter secondAdapter = new SecondAdapter(MainActivity.this, list1);
//        recyclersId.setAdapter(secondAdapter);

//         //网格布局
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
//        recyclersId.setLayoutManager(gridLayoutManager);
//        List list2 = new ArrayList<>();
//        List list3 = new ArrayList<>();
//        list2.add(R.mipmap.yi);
//        list2.add(R.mipmap.er);
//        list2.add(R.mipmap.san);
//        list2.add(R.mipmap.si);
//        list2.add(R.mipmap.wu);
//        list2.add(R.mipmap.liu);
//        for (int i = 0; i < 6; i++) {
//            list3.add("静夜思"+i);
//        }
//        ThirdlyAdaoter thirdlyAdaoter = new ThirdlyAdaoter(MainActivity.this, list2, list3);
//        recyclersId.setAdapter(thirdlyAdaoter);

    }

    @Override
    public void onClick(View v) {
        int index = (int) v.getTag();
        Toast.makeText(this, "被点击", Toast.LENGTH_SHORT).show();
    }
}

第一个适配器
RecyclerView万能适配器_第3张图片




    


package com.example.wangnengadapter;

import android.content.Context;
import android.widget.ImageView;

import java.util.List;

public class FirstAdaoter extends BaseAdapter {

    List strings;
    Context context;

    public FirstAdaoter(Context context, List data) {
        super(context, data);
        this.context = context;
        this.strings = data;
    }

    @Override
    public int getLayout() {
        return R.layout.item_layout;
    }

    @Override
    public void bangding(BaseHodler holder, int position) {
        //找到控件 赋值
        ImageView imageView = (ImageView) holder.getView(R.id.textView_id);
        imageView.setImageResource(strings.get(position));
        holder.itemView.setTag(position);//1
    }
}

第二个适配器

RecyclerView万能适配器_第4张图片




    


package com.example.wangnengadapter;

import android.content.Context;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class SecondAdapter extends BaseAdapter {

    List strings;
    Context context;

    public SecondAdapter(Context context, List data) {
        super(context, data);
        this.context = context;
        this.strings = data;
    }

    @Override
    public int getLayout() {
        return R.layout.item2_layout;
    }

    @Override
    public void bangding(BaseHodler holder, int position) {
        //找到控件 赋值
        TextView titleId = (TextView) holder.getView(R.id.title_id);
        titleId.setText(strings.get(position));
    }
}

第三个适配器
RecyclerView万能适配器_第5张图片




    

    


package com.example.wangnengadapter;

import android.content.Context;
import android.widget.ImageView;
import android.widget.TextView;

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

public class ThirdlyAdaoter extends BaseAdapter {

    List list2 ;
    List list3 ;
    Context context;

    public ThirdlyAdaoter(Context context, List data,List list) {
        super(context, data);
        this.context = context;
        this.list2 = data;
        this.list3 = list;
    }

    @Override
    public int getLayout() {
        return R.layout.item3_layout;
    }

    @Override
    public void bangding(BaseHodler holder, int position) {
        //找到控件 赋值
        ImageView imageView = (ImageView) holder.getView(R.id.image_id);
        imageView.setImageResource(list2.get(position));
        TextView titleId = (TextView) holder.getView(R.id.text_id);
        titleId.setText(list3.get(position));
    }
}

你可能感兴趣的:(次世代数据储存思维与技术)