How to handle multiple layout clicks in recyclerView in Android

前端 未结 5 1736

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:51

    I tried this same way like @user320676, But I tried to complete with a Listener:

    interface MultipleClickListener {
            void onItemClickOne(int position, View v);
            void onItemClickTwo(int position, View v);
            void onItemClickThree(int position, View v);
    }
    

    then you can use the listener in a activity or fragment. Here you can see my full Adapter:

    public class MultipleClicksAdapter extends RecyclerView
            .Adapter {
    
        private ArrayList mDataset;
        private static MultipleClickListener sClickListener;
    
        static class DataObjectHolder extends RecyclerView.ViewHolder {
    
            @BindView(R.id.multiple_clicks_one_textView)
            TextView mOne;
            @BindView(R.id.multiple_clicks_two_textView)
            TextView mTwo;
            @BindView(R.id.multiple_clicks_three_textView)
            TextView mThree;
    
            DataObjectHolder(View itemView) {
                super(itemView);
    
                ButterKnife.bind(this, itemView);
    
                mOne.setOnClickListener((View v) ->
                        sClickListener.onItemClickOne(getAdapterPosition(), mOne));
    
                mTwo.setOnClickListener((View v) ->
                        sClickListener.onItemClickTwo(getAdapterPosition(), mTwo));
    
                mThree.setOnClickListener((View v) ->
                        sClickListener.onItemClickThree(getAdapterPosition(), mThree));
            }
    
        }
    
        void setOnItemClickListener(MultipleClickListener myClickListener) {
            this.sClickListener = myClickListener;
        }
    
        MultipleClicksAdapter(ArrayList myDataset) {
            mDataset = myDataset;
        }
    
        @Override
        public MultipleClicksAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent,
                                                                               int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.multiple_clicks_list_item, parent, false);
    
            MultipleClicksAdapter.DataObjectHolder dataObjectHolder = new MultipleClicksAdapter.DataObjectHolder(view);
            return dataObjectHolder;
        }
    
        @Override
        public void onBindViewHolder(MultipleClicksAdapter.DataObjectHolder holder, int position) {
            holder.mOne.setText(mDataset.get(position).getmTitle());
            holder.mTwo.setText(mDataset.get(position).getmSubTitle());
            holder.mThree.setText(mDataset.get(position).getmThirdTitle());
        }
    
        @Override
        public int getItemCount() {
            return mDataset.size();
        }
    
        interface MultipleClickListener {
            void onItemClickOne(int position, View v);
            void onItemClickTwo(int position, View v);
            void onItemClickThree(int position, View v);
        }
    
    }
    

    Also you can check the complete code in GitHub.

提交回复
热议问题