获取有关单击内部循环视图的数据

时间:2018-03-07 19:04:11

标签: java android

我使用recyclerview构建了一个数据列表。一切都按预期工作。但是当我点击一个单元格时,我想在我的适配器中访问一些数据。点击有效。但我不知道如何访问我的活动列表。

npm package

我在ViewHolder类中声明了onclick侦听器。单击侦听器按预期工作。但我想访问我的events数组中的数据。唯一的问题是我无法访问它。

2 个答案:

答案 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