Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.stefanji:CommRecyclerViewAdapter:2.1'
}
Use Simple
Kotlin:
listView.adapter = object : CommRecyclerViewAdapter<String>(strings, object : AdapterItem {
lateinit var textView: TextView
override fun bindViews(p: View) {
textView = p.findViewById(android.R.id.text1)
}
override fun handleData(p: Int) {
val s = strings[p]
textView.text = s
}
override fun getResId(): Int {
return android.R.layout.simple_list_item_1
}
}) {}
Java:
CommRecyclerViewAdapter<String> mAdapter = new CommRecyclerViewAdapter<>(strings, new AdapterItem() {
TextView title;
@Override
public void handleData(int position) {
String s = strings.get(position);
title.setText(s);
}
@Override
public int getResId() {
return R.layout.list_item;
}
@Override
public void bindViews(View itemView) {
title = itemView.findViewById(R.id.strTitle);
}
});
rcv.setAdapter(mAdapter);
rcv.setLayoutManager(ew LinearLayoutManager(context));
// Inheriting RecyclerView.Adapter/ / extract a layer of CommItemHolder, which holds AdapterItem/ / when onCreateViewHolder, adapterItem injection/ / in onBindViewHolder, get adapterItem through CommItemHolder and realize handleData.Public class CommReCyclerViewAdapter< T> extends RecyclerView.Adapter< CommItemHolder> {Private AdapterItem mAdapterItem;Public CommRecyclerViewAdapter (List< T> data, AdapterItem adapterItem){This.mData = mData;This.mAdapterItem = adapterItem;}Public CommRecyclErViewAdapter (T[] arrayData, AdapterItem adapterItem) {This.mArrayData = arrayData;This.mAdapterItem = adapterItem;}Public CommItemHolder onCreateViewHolder (ViewGroup pare)NT, int viewType) {Return new CommItemHolder (parent.getContext (), parent, mAdapterItem);}Public void onBindViewHolder (CommItemHolder holder, int position) {/ / store Po through tagSition, convenient for clickListenerHolder.itemView.setTag (position);Holder.itemView.setOnClickListener (this);Holder.itemView.setOnLongClickListener (this);Holder.mAdapterItem.haNdleData (position);}Public void onClick (View view) {Int position = (int) view.geTTag ();If (clickListener = null) {ClickListener.onClickItem (position);}}Public Boolean onLongClick (View view) {Int position = (int) view.getTag ();If (longClickListener = null) {LongClickListener.onLongClickItem (position);Return true;}Return false;}}
AdapterItem:Define 3 ways to implement
public interface AdapterItem {
// Data rendering to view/ / position current item locationVoid handleData (int position);/ / need to return to layout IDInt GEtResId ();/ / do the itemView.findViewById of the view here.Void bindViews (View itemView);}
CommItemHolder:
The loaded layout is returned by loading the layout in the super of the constructor and then calling adapterItem. bindViews. Take advantage ofRecyclerView.ViewHolder
ItemView objects that exist internally
public class CommItemHolder extends RecyclerView.ViewHolder {
AdapterItem mAdapterItem;
CommItemHolder(Context context, ViewGroup parent, AdapterItem adapterItem) {
super(LayoutInflater.from(context).inflate(adapterItem.getResId(), parent, false));
mAdapterItem = adapterItem;
mAdapterItem.bindViews(this.itemView);
}
}