How to handle multiple layout clicks in recyclerView in Android

前端 未结 5 1733

In our app we have list of messages. We are switching to RecyclerView. Our messages can consist from texts, images. Sample message can look like this.

5条回答
  •  抹茶落季
    2021-01-02 10:34

    You can set listener into the adapter class. Here is the code :

    ViewHolder class inside adapter :

        public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    
        TextView textViewFirstName;
        ImageView imageViewProfile;
    
        public MyViewHolder(View view) {
            super(view);
            textViewFirstName = (TextView) view.findViewById(R.id.txtName);
            imageViewProfile = (ImageView) view.findViewById(R.id.imageViewProfile);
    
    //setOnClick
            view.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
        //check if the image you want to click should not invoke listener from activity/fragment
            if (v.getId() != R.id.imageViewProfile) {
                if (mItemClickListener != null) {
                    mItemClickListener.onItemClick(v, getPosition());
                }
            }
        }
    }
    

    Set your imageView click in Adapter class onBindViewHolder :

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
    
        holder.textViewFirstName.setText(mArrayListTypeDetials.get(position).getFirstname());
        //set imageView click here
        holder.imageViewProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //ImageView clicked
            }
        });
    }
    

    Creating interface inside Adapter class :

    //interface for recyclerView item click
    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }
    
    /*
    method to set listener to the adapter ViewHolder item
     */
    public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.mItemClickListener = mItemClickListener;
    }
    

    Setting interface from Activity/Fragment :

        mAdapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Intent intent = new Intent(getActivity(), ABC.class);
                startActivity(intent);
            }
        });
    

提交回复
热议问题