Search code examples
javaandroidandroid-recyclerviewandroid-viewbinding

What is the right way of Android View Binding in the RecyclerView adapter class?


Here is the code I used in my RecycleView adapter class. I don't know this is the right way or not to use View Binding. If you have a better solution answer me. Thank you.

@Override
public CategoryAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.common_circle_image, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull CategoryAdapter.MyViewHolder holder, final int position) {
    holder.binding.img.setBackgroundResource(addAdapterData.get(position).getItemUrl());
    holder.binding.txt.setText(addAdapterData.get(position).getItemName());
}

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

public class MyViewHolder extends RecyclerView.ViewHolder {

    CommonCircleImageBinding binding;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        binding = CommonCircleImageBinding.bind(itemView);
        binding.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                commonItemClick.onItemClick(getAdapterPosition(),"");
            }
        });
    }
}

Also, I want to know is it right to use R.layout.layout_name and ViewBinding in the same class.


Solution

  • Here is full view binding recycler view code in java, you can do as like:

    package com.jbws.myviewbindingdemo.adapter;
    
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.jbws.myviewbindingdemo.databinding.RowXmlViewBinding;
    import com.jbws.myviewbindingdemo.pojo.ModelObject;
    
    import java.util.ArrayList;
    
    public class RecyclerViewListAdapter extends RecyclerView.Adapter<RecyclerViewListAdapter.ViewHolder> {
        public ArrayList<ModelObject> modelObjectArrayList;
    
        public RecyclerViewListAdapter(ArrayList<ModelObject> modelObjectArrayList) {
            this.modelObjectArrayList = modelObjectArrayList;
        }
    
        @NonNull
        @Override
        public RecyclerViewListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new ViewHolder(RowXmlViewBinding.inflate(LayoutInflater.from(parent.getContext()),
                    parent, false));
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerViewListAdapter.ViewHolder holder, final int position) {
            ModelObject modelObject = modelObjectArrayList.get(position);
            holder.rowXmlViewBinding.txtObjectName.setText(modelObject.getFullName());
            holder.rowXmlViewBinding.btnUpdateName.setOnClickListener(view -> {
             Log.i("LOG_TAG", "Full Name: " + modelObject.getFullName);
            });
        }
    
        @Override
        public int getItemCount() {
            return modelObjectArrayList == null ? 0 :
                    modelObjectArrayList.size();
        }
    
        public static class ViewHolder extends RecyclerView.ViewHolder {
            private RowXmlViewBinding rowXmlViewBinding;
    
            public ViewHolder(RowXmlViewBinding rowXmlViewBinding) {
                super(rowXmlViewBinding.getRoot());
                this.rowXmlViewBinding = rowXmlViewBinding;
            }
        }
    }