在下面的代码中,每次都调用'setlisteners'方法,不应该改变位置值吗?传递参数位置只有一种方法'setlisteners',但是在日志中,我看到每当我的按钮上发生点击事件时,它显示正确的位置 . 不应该覆盖自己并显示错误的位置,因为点击事件可能随时发生,到那时位置的值会发生变化吗?
让我们假设已经绑定了5个视图,然后点击第一个项目视图,然后它不应该显示最后一个绑定项目视图所持有的最后一个位置吗?
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
setListeners(holder,position);
}
private void setListeners(ViewHolder holder, final int position) {
holder.updownarrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("ddfg",""+position);
}
});
holder.leftlayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
position将保持在onBindViewHolder中绑定的最后一个holder的位置,因为当我点击它时我的View不会调用onBindViewHolder,不应该保持最后绑定的位置并且只要点击任何视图就显示一个位置?
3 回答
不要使用onBindViewHolder中的位置 . 用这个:
onBindViewHolder
中的位置与适配器/数据集中的位置相同 . 您的Click Listener正在使用position
设置绑定时数据集中表示的单个ViewHolder . 即使在绑定了所有视图之后才调用click事件,每个函数实例都已设置为使用每个视图设置的相应位置 .如果每个View共享同一个Click Listener实例,那么您只能获得最后一个位置 . 但是,每个View都拥有自己的Click Listener实例 .
不,
position
将保持onBindViewHolder
中bin的最后一个持有者的位置,因为当您点击它时View
不会调用onBindViewHolder
.有很多种可能性来检索正确的位置 - 例如,如果您在
Views
tag
中设置&获取位置或搜索周围的ViewHolder
并检查其在适配器或布局中的位置 .