OnClickListener for RecyclerView

前端 未结 6 1732
孤城傲影
孤城傲影 2020-12-10 22:57

Unlike ListView, the Android RecyclerView seems way too complicated to implement. Since there is no OnItemClickListener for RecyclerView child, I\'ve been trying to implemen

6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-10 23:28

    Thanks all! I've come up with a solution (though it works for me, I'm not sure how efficient the technique is). I'm using View.OnClickListener interface in my RecyclerView.Adapter class. To prevent massive garbage collection, I've assigned the click listener inside onCreateViewHolder method of my RecyclerView.Adapter. Here is the complete implementation of my RecyclerView.Adapter class:

    package com.example.evinish.recyclerdemo;
    
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.List;
    
    /**
     * Created by evinish on 9/25/2015.
     */
    public class MyRVAdapter extends RecyclerView.Adapter implements View.OnClickListener{
    
        List persons;
    
        public MyRVAdapter(List persons) {
            this.persons = persons;
        }
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
            View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
            MyViewHolder vh=new MyViewHolder(view);
            view.setOnClickListener(this);
    
            return vh;
        }
    
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.company.setText(persons.get(position).getCompany());
            holder.occupation.setText(persons.get(position).getOccupation());
            holder.name.setText(persons.get(position).getName());
    
    
        }
    
        @Override
        public int getItemCount() {
            return persons.size();
        }
    
        @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        }
    
        public void clearAdapter() {
            persons.clear();
            notifyDataSetChanged();
        }
    
        @Override
        public void onClick(View v) {
            TextView clickedName=(TextView)v.findViewById(R.id.card_text1);
            Toast.makeText(v.getContext(),clickedName.getText().toString(),Toast.LENGTH_LONG).show();
    
        }
    }
    

    Please let me know if there is a better method for registering click events in RecyclerView.

提交回复
热议问题