OnSwipe 方法在 RecyclerView 中不起作用

Vel*_*ami 4 android android-fragments android-recyclerview

我正在开发一个用于播放音频文件的应用程序。创建了包含 2 个选项卡的选项卡布局。在两者中都使用了片段并RecyclerView在两者中都使用了片段。名为的片段LibraryFragment具有 this RecycleView,其项目在 Swipped 时必须传递给HomeFragment,这就是我想要做的。但即使滑动动画正在发生,OnSwipe方法也根本不起作用。

这是我用来为我的 recyclerview 下的项目提供刷卡功能的方法LibraryFragment。在方法下OnCreateView我称之为这个initSwipe()方法。

 private void initSwipe(){
    ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ) {


        private boolean swipeBack = false;
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();

          if (direction == ItemTouchHelper.LEFT){
                HomeFragment.audioList.clear();
                HomeFragment.audioList.add(audioList.get(position));
                HomeFragment.libraryAdapter.notifyDataSetChanged();
            Log.e(TAG, "onSwiped: " );
            }
        }


        @Override
        public void onChildDraw(Canvas c, RecyclerView recyclerView,
                                RecyclerView.ViewHolder viewHolder, float dX, float dY,
                                int actionState, boolean isCurrentlyActive) {
            recyclerView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event)
                {
                    if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL)
                    {
                        swipeBack = true;
                    }
                    else
                    {
                        swipeBack = false;
                    }
                    return false;
                }

            });
            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        }

        @Override
        public int convertToAbsoluteDirection(int flags, int layoutDirection) {
            int value = swipeBack ? 0 : super.convertToAbsoluteDirection(flags, layoutDirection);
            swipeBack = false;
            return value;
        }


    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
    itemTouchHelper.attachToRecyclerView(libraryRecyclerView);
}
Run Code Online (Sandbox Code Playgroud)

请帮忙。

小智 5

当项目完全滑出时,将触发 onSwiped() 事件。由于您持有项目视图,因此这种情况永远不会发生

在这里您可以找到一个很棒的教程,您可以在其中实现这一目标。