如何移除RecyclerView的OnItemTouchListener并更换新监听器
解决RecyclerView移除并替换OnItemTouchListener的问题
嘿,这个场景我之前也碰到过!RecyclerView和ListView的处理逻辑确实不一样,ListView的setOnItemClickListener(null)是直接清空替换,但RecyclerView支持同时挂载多个OnItemTouchListener,所以得用更明确的方式来移除旧监听器,具体步骤如下:
1. 提前保存旧监听器的实例
首先,你当初添加监听器的时候,别直接在addOnItemTouchListener里new对象,要把它存成一个变量,这样后续才能精准移除:
// 先把旧监听器实例保存下来 RecyclerTouchListener oldItemTouchListener = new RecyclerTouchListener(this, recyclerView, new MyClickListener() { @Override public void onClick(View view, int position) { itemClick(position); } }); // 再添加到RecyclerView recyclerView.addOnItemTouchListener(oldItemTouchListener);
2. 移除旧监听器
当你需要替换的时候,直接调用RecyclerView的removeOnItemTouchListener方法,传入之前保存的旧实例:
// 移除旧的触摸监听器 recyclerView.removeOnItemTouchListener(oldItemTouchListener);
3. 添加新的监听器
现在就可以放心地添加新的OnItemTouchListener了:
// 创建新的监听器实例 RecyclerTouchListener newItemTouchListener = new RecyclerTouchListener(this, recyclerView, new MyClickListener() { @Override public void onClick(View view, int position) { // 这里写新的点击处理逻辑 newItemClickHandler(position); } }); // 添加到RecyclerView recyclerView.addOnItemTouchListener(newItemTouchListener);
补充说明
RecyclerView的OnItemTouchListener设计成支持多监听器共存,所以没有像ListView那样的“一键清空”方法,必须通过实例引用精准移除。如果你当初没有保存旧实例,那可能就没法直接移除它了——所以养成保存监听器实例的习惯很重要哦!
内容的提问来源于stack exchange,提问作者Dusan
相关产品推荐
相关产品推荐

