如何从 RecyclerView 获取特定视图 touched/clicked?
How to get specific view touched/clicked from RecyclerView?
我有一个包含项目列表的 RecyclerView。每个项目都是一个包含四个文本视图的 RelativeLayout。我想做的是能够区分单击列表项的哪个 textview,然后根据它执行操作。
现在我正在使用
final GestureDetector mGestureDetector = new GestureDetector(MyShiftsPageFragment.this.getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
shiftList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
ViewGroup child = (ViewGroup) recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
Log.i(TAG, child.toString());
}
return false;
}
@Override
public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
Log.i(TAG, "TouchEvent");
}
});
但它似乎只找到 RelativeLayout,而不是该布局之上的单个组件。有任何想法吗?还是我应该采用不同的方式来执行此操作?
这是我整理的示例代码,事件似乎正确触发。
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener, OnCheckedChangeListener {
private CheckBox mCheckBox;
public ViewHolder(View itemView) {
super(itemView);
mCheckBox = (CheckBox) itemView.findViewById(R.id.checkBox1);
mCheckBox.setOnCheckedChangeListener(this);
itemView.setOnClickListener(this);
}
public CheckBox getCheckBox() {
return mCheckBox;
}
@Override
public void onClick(View v) {
Log.d("CustomAdapter.ViewHolder", "item onClick()");
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.d("CustomAdapter.ViewHolder", "checkbox onCheckChanged()");
}
}
当然,您不必让 ViewHolder 实现侦听器接口,您可以根据需要创建侦听器。
我有一个包含项目列表的 RecyclerView。每个项目都是一个包含四个文本视图的 RelativeLayout。我想做的是能够区分单击列表项的哪个 textview,然后根据它执行操作。
现在我正在使用
final GestureDetector mGestureDetector = new GestureDetector(MyShiftsPageFragment.this.getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
shiftList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
ViewGroup child = (ViewGroup) recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
Log.i(TAG, child.toString());
}
return false;
}
@Override
public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
Log.i(TAG, "TouchEvent");
}
});
但它似乎只找到 RelativeLayout,而不是该布局之上的单个组件。有任何想法吗?还是我应该采用不同的方式来执行此操作?
这是我整理的示例代码,事件似乎正确触发。
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener, OnCheckedChangeListener {
private CheckBox mCheckBox;
public ViewHolder(View itemView) {
super(itemView);
mCheckBox = (CheckBox) itemView.findViewById(R.id.checkBox1);
mCheckBox.setOnCheckedChangeListener(this);
itemView.setOnClickListener(this);
}
public CheckBox getCheckBox() {
return mCheckBox;
}
@Override
public void onClick(View v) {
Log.d("CustomAdapter.ViewHolder", "item onClick()");
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.d("CustomAdapter.ViewHolder", "checkbox onCheckChanged()");
}
}
当然,您不必让 ViewHolder 实现侦听器接口,您可以根据需要创建侦听器。