qq_42961281 2020-10-14 10:20 采纳率: 0%
浏览 47

两个recycleView使用同一个适配器的不同实例,其中一个点击事件失效了,求解?

onBindViewHolder中添加监听器

if (mOnItemClickListener != null) {
                Log.d(TAG, "onBindViewHolder: 设置Listener");
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int position = holder.getLayoutPosition();
                        mOnItemClickListener.onItemClick(holder.itemView, position);
                    }
                });
            }

activity中使用

chooseAdapter = new HobbyRecycleAdapter(choose, HobbyRecycleAdapter.MODE_ADD);
        Log.d(TAG, "initView: "+choose.size());
        hobby_recycle_choose.setLayoutManager(new GridLayoutManager(this,3));
        chooseAdapter.setmOnItemClickListener(new HobbyRecycleAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.d(TAG, "onItemClick: "+position);
                need.add(choose.get(position));
                choose.remove(position);
                chooseAdapter.notifyDataSetChanged();
                needAdapter.notifyDataSetChanged();
            }
        });
        hobby_recycle_choose.setAdapter(chooseAdapter);        needAdapter = new HobbyRecycleAdapter(need, HobbyRecycleAdapter.MODE_DELETE);
        hobby_recycle_need.setLayoutManager(new GridLayoutManager(this,3));
        needAdapter.setmOnItemClickListener(new HobbyRecycleAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.d(TAG, "onItemClick: "+position);
                choose.add(need.get(position));
                need.remove(position);
                chooseAdapter.notifyDataSetChanged();
                needAdapter.notifyDataSetChanged();
            }
        });
        hobby_recycle_need.setAdapter(needAdapter);

只有choose的点击事件生效了

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 04:44
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,你需要确保在RecyclerView的布局文件中正确设置了RecyclerView.Adapter。此外,你还需要在适配器的setOnItemClickListener()方法中设置一个唯一的标识符(例如通过getItemId()方法),以便在点击事件处理时识别不同的位置。

    以下是修改后的代码示例:

    1. Activity中:
    public class MainActivity extends AppCompatActivity {
    
        private RecyclerView recyclerView;
        private HobbyRecycleAdapter adapter;
    
        // ...
    }
    
    1. HobbyRecycleAdapter中:
    @Override
    public void setOnItemClickListener(HobbyRecycleAdapter.OnItemClickListener listener) {
        this.listener = listener;
    }
    
    private final OnItemClickListener mListener = new OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            Log.d("MainActivity", "onItemClick: " + position);
    
            // 从adapter中获取当前的位置索引
            int itemId = getItemId(position);
    
            // 如果找到匹配的item,调用listener的方法
            if (listener != null) {
                listener.onItemClick(view, position);
            }
        }
    };
    
    1. HobbyRecycleAdapter中的bindViewHolder()方法中:
    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        super.onBindViewHolder(holder, position);
    
        // 在这里添加你的点击事件逻辑
        if (mListener != null && getItemCount() > position) {
            holder.itemView.setOnClickListener(v -> {
                Log.d("MainActivity", "onClick: " + position);
                listener.onItemClick(v, position);
            });
        } else {
            holder.itemView.setOnClickListener(null);
        }
    }
    

    现在,当用户点击RecyclerView上的任何位置时,onItemClick方法都会被调用,并且mListener将收到正确的点击事件。

    评论

报告相同问题?

悬赏问题

  • ¥15 codesys 使用问题
  • ¥15 Postman一直转圈进不去咋办?
  • ¥15 Kb4103712更新无法完成
  • ¥60 animate html5如何制作涂鸦画板?实现画笔、擦除和清屏功能
  • ¥15 springmvc redis主从
  • ¥15 C++ 中std无法跨lib或dll的问题解决方案
  • ¥15 单片机烧录软件stcISP检测不到串口,各种方法都试过了,就是没有,如何解决?
  • ¥15 python culfflinks怎么画图
  • ¥15 idea中的数据库驱动和druid驱动问题
  • ¥15 Arcgis Pro python中如何读取geojson文件