Android RecyclerView中的setOnClickListener

Android RecyclerView中的setOnClickListener,android,Android,我正在尝试为ImageButtons设置OnClickListener,并为将添加到RecyclerView中的所有视图设置按钮 我不知道怎么做。。。 我正在尝试在适配器的ViewHolder中设置它 像这样: public Todo_itemViewHolder(View itemView) { super(itemView); Title=itemView.findViewById(R.id.todo_txt_Titleitem); Conte

我正在尝试为ImageButtons设置OnClickListener,并为将添加到RecyclerView中的所有视图设置按钮

我不知道怎么做。。。 我正在尝试在适配器的ViewHolder中设置它 像这样:

public Todo_itemViewHolder(View itemView) {
        super(itemView);
        Title=itemView.findViewById(R.id.todo_txt_Titleitem);
        Content=itemView.findViewById(R.id.todo_txt_Contentitem);
        edit=itemView.findViewById(R.id.todo_btn_edit);
        remove=itemView.findViewById(R.id.todo_btn_remove);
        Add=itemView.findViewById(R.id.todo_btn_add);

        Add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(Todo_Adapter.this, Todo_saveActivity.class);
                startActivityForResult(intent,Request_Code);
            }
        });

谢谢。

您第一次使用界面时喜欢:

   public interface OnItemClickListener {
    void onItemClick(ContentItem item);
}
在Adpter中之后:

private final List<ContentItem> items;
private final OnItemClickListener listener;

public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
    this.items = items;
    this.listener = listener;
}

不能用适配器引用启动活动,必须从活动/上下文开始,如下所示

Intent intent=new Intent(MyActivity.this/myContext,Your2ndActivity.class);
startActivity(intent)
将yur适配器中的上下文作为构造函数的参数传递,或使用视图中的上下文

contxt=v.getContext();

通过这种方式,您可以用最少的代码将单击侦听器添加到所有必要的视图中,并轻松地为每个单击事件提供代码。(好吧,首先要做到这一点,不如使用一些库(如
ButterKnife
)那么简单!)

首先,定义一个类实现RecyclerView.OnItemTouchListener

public class ItemListeners implements RecyclerView.OnItemTouchListener {

public interface  OnItemClickListeners {
    void onClick(View view, int postion);
}

private GestureDetector  gestureDetector;
private OnItemClickListeners onItemTouchListener;

public ItemListeners(Context context, OnItemClickListeners onItemTouchListener) {
    gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return true;
    }
    });
    this.onItemTouchListener = onItemTouchListener;
}

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
    View childView = rv.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && onItemTouchListener != null && 
       gestureDetector.onTouchEvent(e)){         onItemTouchListener.onClick(childView,rv.getChildAdapterPosition(childView));
    }
    return false;
}
然后在片段或活动中

 recyclderView.addOnItemTouchListener(new ItemListeners(getBaseContext(), 
    new ItemListeners.OnItemClickListeners() {
        @Override
        public void onClick(View view, int postion) {
            if (petLists.size() > 0){
                Intent intent = new Intent(getBaseContext(), 
                 SomeActivity.class);               
               if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);

                }
            }

        }
    }));

你能在这里粘贴更完整的代码吗?从中得到的错误是什么?那么这个代码是正确的?上面写着无法解决的问题。请解释清楚你面临的问题。将您的
Todo\u itemViewHolder
类代码放入,除非您很难理解该问题?
public class Todo_itemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public Todo_itemViewHolder(View itemView) {
            super(itemView);
            Title = itemView.findViewById(R.id.todo_txt_Titleitem);
            Content = itemView.findViewById(R.id.todo_txt_Contentitem);
            edit = itemView.findViewById(R.id.todo_btn_edit);
            remove = itemView.findViewById(R.id.todo_btn_remove);
            Add = itemView.findViewById(R.id.todo_btn_add);

            Add.setOnClickListener(this);
            remove.setOnClickListener(this);
            ... //declare listeners for other views
        }

        @Override
        public void onClick(View view) {
            switch (view.getId()) {

                case R.id.todo_btn_add: {  //add button click
                    Intent intent = new Intent(Todo_Adapter.this, Todo_saveActivity.class);
                    startActivityForResult(intent, Request_Code);
                }

                case R.id.todo_btn_remove: {  // remove button click
                }

                ... // add other listener events
            }
        }
    }
public static class Todo_itemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    Title=itemView.findViewById(R.id.todo_txt_Titleitem);
    Content=itemView.findViewById(R.id.todo_txt_Contentitem);
    edit=itemView.findViewById(R.id.todo_btn_edit);
    remove=itemView.findViewById(R.id.todo_btn_remove);
    Add=itemView.findViewById(R.id.todo_btn_add);


      private Todo_itemViewHolder (View itemView) {
            super(itemView);
            add.setOnClickListener(this);

      }

      @Override
      public void onClick(View view) {
            Intent intent=new Intent(context, Todo_saveActivity.class);
            startActivityForResult(intent,Request_Code);
      }
  }
public class ItemListeners implements RecyclerView.OnItemTouchListener {

public interface  OnItemClickListeners {
    void onClick(View view, int postion);
}

private GestureDetector  gestureDetector;
private OnItemClickListeners onItemTouchListener;

public ItemListeners(Context context, OnItemClickListeners onItemTouchListener) {
    gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return true;
    }
    });
    this.onItemTouchListener = onItemTouchListener;
}

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
    View childView = rv.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && onItemTouchListener != null && 
       gestureDetector.onTouchEvent(e)){         onItemTouchListener.onClick(childView,rv.getChildAdapterPosition(childView));
    }
    return false;
}
 recyclderView.addOnItemTouchListener(new ItemListeners(getBaseContext(), 
    new ItemListeners.OnItemClickListeners() {
        @Override
        public void onClick(View view, int postion) {
            if (petLists.size() > 0){
                Intent intent = new Intent(getBaseContext(), 
                 SomeActivity.class);               
               if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);

                }
            }

        }
    }));