RecyclerView general Adapter

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);
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *