how to implement a SetOnItemClickListener FirebaseRecyclerViewAdapter

前端 未结 2 2071
独厮守ぢ
独厮守ぢ 2020-11-27 05:27

how to implement a SetOnItemClickListener event in a Firebase RecyclerView Adapter? I use the example of documentation, chat app:

 private FirebaseRecyclerVi         


        
2条回答
  •  生来不讨喜
    2020-11-27 06:09

    Here is my Solution. This worked for me

    ViewHolder Class

    public class StudentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    
    public TextView textViewName;
    public TextView textViewRoll;
    public TextView textViewAge;
    
    
    public MyViewHolderClickListener mListener;
    
    private String TAG= getClass().getSimpleName();
    
    public static interface MyViewHolderClickListener{
    
        public void onTextViewNameClick(View view, int position);
        public void onTextViewRollClick(View view, int position);
    }
    
    public StudentViewHolder(View itemView) {
        super(itemView);
        textViewName = (TextView) itemView.findViewById(R.id.textViewName);
        textViewRoll = (TextView) itemView.findViewById(R.id.textViewRoll);
        textViewAge = (TextView) itemView.findViewById(R.id.textViewAge);
    
        textViewName.setOnClickListener(this);
        textViewRoll.setOnClickListener(this);
    }
    
    
    public void bindToStudent(Student student){
        if (student == null) {
            return;
        }
    
        textViewName.setText("Name: " +  student.getName());
        textViewRoll.setText( "Roll: " + student.getRoll());
        textViewAge.setText( "Age: " +  student.getAge());
    }
    
    public void setCustomOnClickListener(MyViewHolderClickListener listener  ){
        this.mListener = listener;
    }
    
    @Override
    public void onClick(View view) {
    
        Log.d(TAG, "onClick at " + getAdapterPosition());
        Log.d(TAG, "id: " + view.getId());
    
        if( mListener!= null ){
            switch (view.getId()) {
                case R.id.textViewName:
                    mListener.onTextViewNameClick(view, getAdapterPosition());
                    break;
                case R.id.textViewRoll:
                    mListener.onTextViewRollClick(view, getAdapterPosition());
                    break;
    
                default:
                    break;
            }
    
        }
    
     }
    
    
    
    }
    

    Adapter Class

    public class StudentListAdapter extends FirebaseRecyclerAdapter {
    
    Activity parentActivity;
    StudentViewHolder.MyViewHolderClickListener myViewHolderClickListener;
    
    private String TAG = getClass().getSimpleName();
    
    public StudentListAdapter(Activity mActivity, Class modelClass, int modelLayout, Class viewHolderClass, Query ref) {
        super(modelClass, modelLayout, viewHolderClass, ref);
        parentActivity = mActivity;
    }
    
    
    @Override
    public StudentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        StudentViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
        // adding my MyViewHolderClickListener here
        viewHolder.setCustomOnClickListener(myViewHolderClickListener);
        return viewHolder;
    }
    
    @Override
    protected void populateViewHolder(StudentViewHolder viewHolder, final Student model, final int position) {
    
        Log.d(TAG, model.toString());
        Log.d(TAG, getRef(position).getKey());
    
        // bind view
        viewHolder.bindToStudent(model);
    }
    
    
    public void setMyViewHolderClickListener(StudentViewHolder.MyViewHolderClickListener listener){
        this.myViewHolderClickListener = listener;
    }
    
    
    }
    

    In Activity Class

            mAdapter = new StudentListAdapter(this, Student.class, R.layout.list_item, StudentViewHolder.class, studentQuery);
        mAdapter.setMyViewHolderClickListener(new StudentViewHolder.MyViewHolderClickListener() {
            @Override
            public void onTextViewNameClick(View view, int position) {
                Log.d(TAG, "Name Click at " +position);
            }
    
            @Override
            public void onTextViewRollClick(View view, int position) {
                Log.d(TAG, "Roll Click at " +position);
            }
        });
    
        recyclerView.setAdapter(mAdapter);
    

提交回复
热议问题