1 android android-recyclerview
recyclers子视图包含两个可点击的对象,一个是一组TextViews和ImageView,另一个是CheckBox(请参阅 - Android Recyclerview Multiple onclick项目)我想看看是否在孩子上点击了复选框.如果是这样,那么我改变了CheckBox的状态.否则,我发起另一项活动(结果).上面的链接显示了在视图持有者中处理点击次数.我想在我设置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) {
}
});
Run Code Online (Sandbox Code Playgroud)
有没有办法可以处理活动中孩子内部多个项目的点击(而不是ViewHolder)?
您始终可以创建一个将事件传递给活动的界面.所以举个例子
public interface ChildItemClickListener {
public void onClick(View v, int position);
}
Run Code Online (Sandbox Code Playgroud)
然后在你的适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
/* your code*/
...
private ChildItemClickListener listener;
...
*/
public void setChildItemClickListener(ChildItemClickListener listener) {
this.listener = listener;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你这样调用它
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;
}
Run Code Online (Sandbox Code Playgroud)
那将是它:)希望它有所帮助,祝你好运
| 归档时间: |
|
| 查看次数: |
6680 次 |
| 最近记录: |