天天看點

android通用擴充卡,萬能擴充卡: 一款用于RecyclerView的通用擴充卡

AdapterDemo

RecyclerView 萬能擴充卡

(一)androidX 使用

項目 gradle.properties

android.useAndroidX=true

android.enableJetifier=true

項目 build.gradle

implementation 'com.rq.adapter:androidx_rvlib:1.0.0'

(二)v7 使用

項目 build.gradle

~~implementation 'com.rq.adapter:android_rvlib:1.0.0'~~

注:兩個版本的使用方法,基本一緻,隻是導入的支援包不一樣,根據項目具體使用的包調整,

,後續更新以及使用細則皆以 androidx_rvlib 最新包作說明

擴充卡主要思路是一個業務(同一種Item)内容需要建立一個ViewHolder 繼承自 BaseViewHolder,

BaseAdapter 則隻需要執行個體化一個即可,正常使用直接 new BaseAdapter(Context,int,Class)即可

具體的視圖業務在ViewHolder 的 fillData(int position, Object data) 方法即可,如以下代碼:

public class ExampleViewHolder extends BaseViewHolder {

public ExampleViewHolder(View itemView) {

super(itemView);

}

@Override

public void fillData(int position, String data) {

super.fillData(position, data);

//setTextToView(R.id.txt, data);

setItemText(R.id.txt, data);

}

}

使用細則:

1.BaseAdapter 的構造函數中,最後一個參數innerClassContext為可選參數 為 Object... 的都是針對使用内部ViewHolder類的,因為反射需要

注意要為 public * ,若ViewHolder為單獨的檔案或者靜态内部類則無需傳入此參數

2.資料填充調用setData()即可,添加資料則調用addData();

3.BaseAdapter.setDisplay() 設定資料本地展示條件,BaseAdapter.display(Object rule)根據規則

内容展示資料,null-清除展示條件,全部展示;

4.添加點選事件

主類邏輯

```

@Override

public void onAction(int action, Object data) {

HeadViewHolder.DebugData bean = (HeadViewHolder.DebugData) data;

if (action == R.id.txt_left) {

Toast.makeText(MainActivity.this, "點選了左邊->" + (bean == null ? "null" : bean.realContent), Toast.LENGTH_SHORT).show();

} else if (action == R.id.txt_right) {

Toast.makeText(MainActivity.this, "點選了右邊-> " + (bean == null ? "null" : bean.realContent), Toast.LENGTH_SHORT).show();

}

}

private void showHeadViewHolder() {

mAdapter.setActionPasser(this);

mAdapter.addOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(BaseAdapter adapter,BaseViewHolder holder, Object bean, View view, int position) {

Log.e("MainActivity", "onItemClick:bean ->" + bean);

Log.e("MainActivity", "onItemClick:holder ->" + holder);

Log.e("MainActivity", "onItemClick:view ->" + view);

Log.e("MainActivity", "onItemClick:position ->" + position);

}

});

mAdapter.setHeadHolder(1, null, HeadViewHolder.class, R.layout.item_head_view);

}

HeadViewHolder代碼

public class HeadViewHolder extends BaseViewHolder implements View.OnClickListener {

public static class DebugData {

public DebugData(boolean isLeft, String realContent) {

this.isLeft = isLeft;

this.realContent = realContent;

}

boolean isLeft = false;

String realContent;

}

public HeadViewHolder(View itemView) {

super(itemView);

itemView.findViewById(R.id.txt_left).setOnClickListener(this);

itemView.findViewById(R.id.txt_right).setOnClickListener(this);

}

@Override

public int inflateLayoutId() {

return R.layout.item_head_view;

}

@Override

public void fillObject(@Nullable Object data) {

super.fillObject(data);

if (data instanceof DebugData) {

DebugData bean = (DebugData) data;

if (bean.isLeft) {

//setTextToView(R.id.txt_left, bean.realContent);

setItemText(R.id.txt_left, bean.realContent);

} else {

//setTextToView(R.id.txt_right, bean.realContent);

setItemText(R.id.txt_right, bean.realContent);

}

}

}

@Override

public void onClick(View view) {

if (mActionPasser != null) {

mActionPasser.onAction(view.getId(), getData());

}

}

}

混淆

-keep public class * extends com.rq.rvlibrary.BaseViewHolder { *;}

##### 2020-04-28更新:

1.移除 v4 v7 相容版本,需要使用的下載下傳androidX版本,然後通過編譯按照編譯器訓示重新導包

2.移除 setChildClick 方法,統一使用 addOnItemClickListener

3.精簡BaseAdapter類,加入子項資料擷取方法,加入無資料空資料布局顯示

##### 2020-08-13更新:

1.增加 OnInterceptClick 回調,子Item隻需要實作該接口便可以完成點選邏輯,與 addOnItemClickListener 相容,使用方式檢視 OnInterceptClick 注釋

##### 2021-04-07更新:

1.修改 OnItemClickListener 回調 ,增加回調參數

2.BaseViewHolder.setTextToView() --更名--> setItemText()

3.增加 AdapterHolderController 接口,ViewHolder實作該接口可控制RV資料變化

4.AD增加 onBindEasyHolder 方法,重載可快速實作資料填充,無需建立ViewHolder檔案

### 未完待續...