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'
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);
}
}
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();
}
}
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
}
}
第二个适配器
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));
}
}
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));
}
}