我使用recyclerview构建了一个数据列表。一切都按预期工作。但是当我点击一个单元格时,我想在我的适配器中访问一些数据。点击有效。但我不知道如何访问我的活动列表。
npm package
我在ViewHolder类中声明了onclick侦听器。单击侦听器按预期工作。但我想访问我的events数组中的数据。唯一的问题是我无法访问它。
答案 0 :(得分:1)
你的onclick应该在你的onBindViewHolder
中In [3]: locals()['data' + 'b'] = 'n'
In [4]: print datab
n
答案 1 :(得分:0)
如果您只想处理项目上的点击,可以这样做:
在适配器中编写一个函数以在某个位置获取事件:
public Event getEventAtPosition(int position) {
if (events != null && events.size() > position)
return events.get(position);
else return null;
}
然后实施RecyclerTouchListener:
public interface ClickListener{
void onClick(View view,int position);
void onLongClick(View view,int position);
}
class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{
private ClickListener clicklistener;
private GestureDetector gestureDetector;
public RecyclerTouchListener(Context context, final RecyclerView recycleView, final ClickListener clicklistener){
this.clicklistener=clicklistener;
gestureDetector=new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child=recycleView.findChildViewUnder(e.getX(),e.getY());
if(child!=null && clicklistener!=null){
clicklistener.onLongClick(child,recycleView.getChildAdapterPosition(child));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child=rv.findChildViewUnder(e.getX(),e.getY());
if(child!=null && clicklistener!=null && gestureDetector.onTouchEvent(e)){
clicklistener.onClick(child,rv.getChildAdapterPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
最后,您可以这样使用它:
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
recyclerView, new ClickListener() {
@Override
public void onClick(View view, final int position) {
Event event= ((EventListAdapter)recyclerView.getAdapter()).getEventAtPosition(position);
}
@Override
public void onLongClick(View view, int position) {
}
}));
这样,您的所有Recycler视图只有一个ClickListener,这比为每个项目声明一个侦听器更为理想。
有关RecyclerView和onClick的更多信息,请查看以下主题:RecyclerView onClick