在我的应用程序中,我需要获得一个特定位置的完整的回收器视图行(因为我想获得该行的一些视图)。我搜索了我们可以通过方法getAdapterPosition()得到位置。现在获得位置后这个方法我想得到那个位置的完整行。我怎么能实现呢?
编辑:我在每一行都有一些视图,我在按钮上设置onclick listner,点击我想要完整的行或顶部布局(父布局)。我明白是在点击时调用它返回父视图包裹哪个按钮但不完整的行。
答案 0 :(得分:0)
我使用了一个类来获取视图(以及点击和长按)
public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
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) {
}
public interface ClickListener {
void onClick(View view, int position);
void onLongClick(View view, int position);
}
}
并使用此
/ ** * Recycler视图项单击处理程序 * /
rvDraft.addOnItemTouchListener(new RecyclerTouchListener(getActivity(),
rvDraft, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, final int position) {
// click operation
}
@Override
public void onLongClick(View view, final int position) {
Dialogs dialog = new Dialogs();
dialog.showAlertForAction(getActivity(), getString(R.string.are_u_sure_want_to_delete), new AlertInterface() {
@Override
public void buttonYesClick() {
// long press operation
}
@Override
public void buttonNoClick() {
}
});
}
}));
希望这会对你有所帮助。
答案 1 :(得分:0)
我现在已经解决了这个问题。首先使用适配器类
中的以下方法获取适配器中的recycleler视图 @Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
}
以及代码
下的点击事件使用RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForLayoutPosition(getAdapterPosition());
然后将持有者投射到实际对象,如下所述
MessageViewHolder messageViewHolder = (MessageViewHolder) holder;
恭喜!现在你有一个特定位置的完整行。快乐的编码
答案 2 :(得分:0)
使用全局变量View selectedView
。在自定义ViewHolder
类中,假设行项为LinearLayout集,请添加以下行
rowItemLayout = (LinearLayout) itemView.findViewById(R.id.row_item);
rowItemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedView = rowItemLayout;
..
}
});
现在您可以使用
获取该视图public View getSelectedView() {
return selectedView;
}