Comments (12)
这个描述不太清楚,可以提交详细的描述或者代码么?
from commonadapter.
就是使用这个adapter时,如果存在整个item的点击事件时,里面的按钮点击的时候,既会触发按钮的点击事件,也会触发整个item的点击事件。
from commonadapter.
整个item的点击事件你是怎么捕获的呢?我不记得有这个功能
from commonadapter.
你把点击事件都放在item里面,不要对recyclerview 进行点击的监听,这样的写法就不会出现这样的情况了。我感觉你是做了两套监听方案,所以出现了多次触发的情况。
from commonadapter.
item里面只是做单个View的点击时间,应该在你写的setView()中进行,
/**
* @tips: 优化小技巧:在这里直接设置按钮的监听器。
* 因为这个方法仅仅在item建立时才调用,所以不会重复建立监听器。
*/
@Override
public void setViews() {
// 这个方法仅仅在item构建时才会触发,所以在这里也仅仅建立一次监听器,不会重复建立
mOrderQueren.setOnClickListener(v->outOrder(v));
}
我对CommonRcvAdapter做了一点修改,这样就可以在外面使用了,onCreateViewHolder()中添加了一下监听事件。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RcvAdapterItem viewHolder = new RcvAdapterItem(parent.getContext(), parent, createItem(mType));
setListener(parent, viewHolder, viewType);
return viewHolder;
}
protected void setListener(final ViewGroup parent, final RcvAdapterItem viewHolder, int viewType)
{
viewHolder.itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (mOnItemClickListener != null)
{
int position = viewHolder.getAdapterPosition();
mOnItemClickListener.onItemClick(parent, v,position);
}
}
});
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
if (mOnItemClickListener != null)
{
int position = viewHolder.getAdapterPosition();
return mOnItemClickListener.onItemLongClick(parent, v, position);
}
return false;
}
});
}
这样就可以通过接口OnItemClickListener把点击事件传递出来,在Activity中实现这个接口就可以了。
mAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(ViewGroup parent, View view, int position) {
position = position - wrapper.getHeaderCount();
if (position >= 0) {
//处理点击操作
}
}
@Override
public boolean onItemLongClick(ViewGroup parent, View view, int position) {
return false;
}
});
from commonadapter.
既然你做了这样的监听修改,那么自然会出现这样的情况了。我是不期望在外面做监听的,这样代码的聚合度和维护成本会提升。
from commonadapter.
开始时没有这样做,按照您提供的实例做的
recyclerView.addOnItemTouchListener(new RcvOnItemClickListener(this, new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
position = position - wrapper.getHeaderCount();
if (position >= 0) {
data.remove(position);
}
}
}));
但是这样每次都会调用到,包括item控件内部的View,所以我就稍微做了一下修改,放到Adaapter中做了监听。
from commonadapter.
这样吧,咱们可以探讨一下。我的qq [email protected]
from commonadapter.
ItemView中的子View进行监听.这个是否在adapter中不同于OnItemClickListener的接口?
from commonadapter.
是的,并不希望提供OnItemClickListener @DreamMemory001 adapter本身是一个数据和试图绑定器,提供这样的事件监听十分奇怪
from commonadapter.
那Recyclerview是否有一个可以设置到activity上的点击事件的接口呢,这个接口不是item的,而是别的view的,请问,有吗?
from commonadapter.
from commonadapter.
Related Issues (20)
- 缺少ExRcvAdapterWrapper HOT 1
- test
- 请问如何去获取点击item所对应的数据? HOT 2
- RecyclerView MemoryLeak HOT 5
- 如何动态的设置List来实现更多加载或者上拉刷新功能 HOT 1
- RecyclerView加载数据显示不完全。 HOT 7
- ViewHolder中的item问题 HOT 5
- 增加recycleview或者adapter上的item的clicklistener,并且要能和item内部的监听器共存 HOT 1
- 如何更新Item构造函数中传入的的非泛型数据呢? HOT 4
- RecycleView RecycleViewPool 中存在内存泄漏,每次显示时候RecycleViewPool 中RcvAdapterItem会增加。 HOT 10
- 为什么在Scrollview 里面 嵌套 recyclerview 的时候,使用这个CommonAdapter的话,recyclerview 是可以正常展示的呢? HOT 5
- 依赖失败 HOT 4
- 没有loadingmore的api么 HOT 1
- debug版本无法运行 HOT 2
- 2.2.1 依赖失败 HOT 3
- setHeaderView 横向滚动支持,内部类包权限限制方法重写 HOT 2
- Eclips
- Eclips怎么使用?有jar包吗? HOT 1
- 我这样做 item局部刷新 发现布局还是会复用 出现状态重复显示的ui HOT 1
- 添加头部后,无法动态remove掉 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from commonadapter.