拖拽在RecyclerView列表中滑动

时间:2016-04-20 21:07:15

标签: android android-recyclerview

我一直在在RecyclerView列表中尝试使用ItemTouchHelper进行拖动和滑动操作。我已经使用了这个guide并且它运行得很好,除了我无法在LongClick上激活滑动。我已设法为Drag动作执行此操作:

        textview.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                dragStartListener.onStartDrag(holder);
                return false;
            }
        });

我不知道如何进行滑动,因为它没有onStartSwipe()接口,并且我通过模仿onStartDrag()接口尝试实现一个尝试失败了。
如何制作?谢谢你的时间。

我设法实现了onStartSwipe()接口,它本身就可以工作。但是,一旦我尝试在同一视图上同时执行拖动和滑动,它就会出现奇怪的行为。更确切地说,一旦我触摸视图,对于整个按下,仅激活拖动或仅滑动动画。

不仅如此,很难在两个动作之间进行选择,因为它将获得你在一个或另一个之间进行选择的第一个mirco运动。

我尝试使用此代码进行上述说明:

        tv.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mDragStartListener.onStartDrag(holder);
                return false;
            }
        });

        tv.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mSwipeStartListener.onStartSwipe(holder);
                return true;
            }
        });

我也试过使用这样的framelayout:

        tv.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mDragStartListener.onStartDrag(holder);
                return true;
            }
        });

        fl.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mSwipeStartListener.onStartSwipe(holder);
                return true;
            }
        });

在这里,我拖动TextView,然后滑动FrameLayout。但由于文本视图位于framelayout的顶部,因此它只能拖动,有时如果触摸项目的角落也会滑动。

有关如何同时对同一项目进行拖动和滑动的任何想法?一旦元素被LongClicked,我希望能够拖动或滑动。我可以使用单独的ImageView进行滑动,使用TextView进行拖动,但我不必这样做,因为它会破坏我的设计。

1 个答案:

答案 0 :(得分:0)

我不确定您为什么在recyclerview中使用draghelpers。 您可以改用ItemTouchHelper 它允许拖放和滑动。

ItemTouchHelper SimpleCallBack

Tutorial for implementation