如何在android中获取回收站视图的特定位置行?

w8f9ii69  于 2023-01-28  发布在  Android
关注(0)|答案(4)|浏览(120)

在我的应用程序中,我需要获得特定位置的回收器视图的完整行(因为我想获得该行的一些视图)。我搜索了一下,我们可以通过方法getAdapterPosition()获得位置。现在,通过此方法获得位置后,我想获得该位置的完整行。我如何实现呢?
编辑:我有一些对每一行的看法,我已经设置了点击列表按钮,我想得到完整的行或顶部布局(父布局)。我的理解是,当点击被称为返回父视图上的按钮是 Package ,但不完整的行。

gajydyqb

gajydyqb1#

我使用了一个类来获取视图(以及单击和长时间单击)

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);
    }

}

并利用这个
/**回收器视图项单击处理程序/

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() {

                        }
                    });

                }
            }));

希望这对你有帮助。

deyfvvtc

deyfvvtc2#

使用全局变量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;
}
j13ufse2

j13ufse23#

现在我已经找到了这个问题的解决方案。首先在适配器类中使用下面的方法获得适配器中的回收器视图

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    mRecyclerView = recyclerView;
}

和单击事件时使用以下代码

RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForLayoutPosition(getAdapterPosition());

然后如下所述将保持器铸造到实际物体上

MessageViewHolder messageViewHolder = (MessageViewHolder) holder;

恭喜!!现在你已经有了一个完整的行的特定位置。快乐编码

qlckcl4x

qlckcl4x4#

你可以试试

getBindingAdapterPosition(view);
getAbsoluteAdapterPosition() ;
getchildAdapterPosition(view);

相关问题