在另一个视图中获取回收视图详细信息的最佳方法



我正在包含所有视图的主布局上实现onClick,以便将数据传递到另一个视图,例如:

holder.wholeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, String.valueOf(position), Toast.LENGTH_SHORT).show();
//pass data with something like eventBus and transition to another view 
}
});

我认为有更好的方法可以做到这一点吗?

使用这个:

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
public interface ClickListener {
void onClick(View view, int position);
void onLongClick(View view, int position);
}
private GestureDetector gestureDetector;
private ClickListener clickListener;
public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
this.clickListener = clickListener;
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildPosition(child));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}

从您正在使用回收器视图的活动中,可以像这样使用它:

mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, mRecyclerView,
new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
// use this position to fetch the data from your list which you used to populate your recylcer view
}
@Override
public void onLongClick(View view, int position) {
}
}));

您应该具有从中创建回收器视图项目的项目列表。现在只需使用这个

myList.get(holder.getAdapterPosition());

这将返回单击位置的对象。

希望这有帮助。

最新更新