Android RecyclerView中的setOnClickListener
我正在尝试为ImageButtons设置OnClickListener,并为将添加到RecyclerView中的所有视图设置按钮 我不知道怎么做。。。 我正在尝试在适配器的ViewHolder中设置它 像这样: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
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);
}
}
}
}));