如何检查在 recyclerview 中单击了哪个项目 child
How to check which item was clicked in a recyclerview child
recyclerschild视图包含两个click-ableobjects,一个是一组TextViews和ImageView,另一个是CheckBox
(参考 - )
我想看看 child 上的复选框是否被点击。如果是这样,那么我更改 CheckBox 的状态。
否则,我启动另一个 activity (结果)。上面的 link 显示处理视图持有者中的点击。我想在设置 RecyclerView 的其他活动之一中处理点击。
//the view needs a listener
final GestureDetector mGestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
View child = recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY());
if(child!=null && mGestureDetector.onTouchEvent(motionEvent)){
if(child.getId() == R.id.chk_box_pin){
//checking, this didn't work
}
else {
TextView idView = (TextView) child.findViewById(R.id.note_id_txt_vw);
if (DEBUG) Toast.makeText(getActivity(),
"ID is " + idView.getText().toString(), Toast.LENGTH_SHORT).show();
startEditNoteActivity(ActivityContract.ACTIVITY_EDIT, idView.getText().toString());
}
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
}
});
有没有一种方法可以处理 activity(而不是 ViewHolder)中 child 内多个项目的点击?
您始终可以创建一个将事件传递给 activity 的接口。
例如
public interface ChildItemClickListener {
public void onClick(View v, int position);
}
然后在你的适配器中
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
/* your code*/
...
private ChildItemClickListener listener;
...
*/
public void setChildItemClickListener(ChildItemClickListener listener) {
this.listener = listener;
}
}
然后你像这样调用它
if(child!=null && mGestureDetector.onTouchEvent(motionEvent)) {
if(child.getId() == R.id.chk_box_pin){
//checking, this didn't work
}
else {
TextView idView = (TextView) child.findViewById(R.id.note_id_txt_vw);
if (DEBUG) Toast.makeText(getActivity(),
"ID is " + idView.getText().toString(), Toast.LENGTH_SHORT).show();
startEditNoteActivity(ActivityContract.ACTIVITY_EDIT, idView.getText().toString());
}
if(listener != null)
listener.onClick(YOUR_VIEW, POSITION);
return true;
}
就是这样:)希望对你有帮助,祝你好运
不幸的是,您必须实现自己的侦听器才能与 activity 通信。
创建一个接口,在您的 activity 上实现它,在您的适配器上传递您的接口实例(在您的接口上投射上下文)并使用自定义参数调用您的自定义方法。
像这样您应该可以访问您的 ViewHolder
(不要忘记使用适配器最佳实践实施)。
希望对您有所帮助!
最好。
检查这个:Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?
recyclerschild视图包含两个click-ableobjects,一个是一组TextViews和ImageView,另一个是CheckBox
(参考 -
//the view needs a listener
final GestureDetector mGestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
View child = recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY());
if(child!=null && mGestureDetector.onTouchEvent(motionEvent)){
if(child.getId() == R.id.chk_box_pin){
//checking, this didn't work
}
else {
TextView idView = (TextView) child.findViewById(R.id.note_id_txt_vw);
if (DEBUG) Toast.makeText(getActivity(),
"ID is " + idView.getText().toString(), Toast.LENGTH_SHORT).show();
startEditNoteActivity(ActivityContract.ACTIVITY_EDIT, idView.getText().toString());
}
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
}
});
有没有一种方法可以处理 activity(而不是 ViewHolder)中 child 内多个项目的点击?
您始终可以创建一个将事件传递给 activity 的接口。 例如
public interface ChildItemClickListener {
public void onClick(View v, int position);
}
然后在你的适配器中
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
/* your code*/
...
private ChildItemClickListener listener;
...
*/
public void setChildItemClickListener(ChildItemClickListener listener) {
this.listener = listener;
}
}
然后你像这样调用它
if(child!=null && mGestureDetector.onTouchEvent(motionEvent)) {
if(child.getId() == R.id.chk_box_pin){
//checking, this didn't work
}
else {
TextView idView = (TextView) child.findViewById(R.id.note_id_txt_vw);
if (DEBUG) Toast.makeText(getActivity(),
"ID is " + idView.getText().toString(), Toast.LENGTH_SHORT).show();
startEditNoteActivity(ActivityContract.ACTIVITY_EDIT, idView.getText().toString());
}
if(listener != null)
listener.onClick(YOUR_VIEW, POSITION);
return true;
}
就是这样:)希望对你有帮助,祝你好运
不幸的是,您必须实现自己的侦听器才能与 activity 通信。
创建一个接口,在您的 activity 上实现它,在您的适配器上传递您的接口实例(在您的接口上投射上下文)并使用自定义参数调用您的自定义方法。
像这样您应该可以访问您的 ViewHolder
(不要忘记使用适配器最佳实践实施)。
希望对您有所帮助!
最好。
检查这个:Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?