java - 滑动删除 Android recyclerview 不起作用

标签 java android swipe recyclerview-layout

@Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_tab2, container, false);

            dbManager = new DBManager(getContext(), null, null, 1);
            items = dbManager.getAllShoppingItems();
            recyclerView = view.findViewById(R.id.recyclerview);
            adapter = new Adapter(getActivity(), items);
            recyclerView.setAdapter(adapter);
            ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
            itemTouchHelper.attachToRecyclerView(recyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
            setUserVisibleHint(true);   //Ensure keyboard is hidden
            return view;
        }

        ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP |
                ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                Collections.swap(items,viewHolder.getAdapterPosition(), target.getAdapterPosition());
                adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                adapter.notifyItemChanged(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                dbManager.deleteAllItems();
                for (int i = 0; i < items.size(); i++) {
                    dbManager.addItem(items.get(i));
                }
                return true;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                    items.remove(viewHolder.getAdapterPosition());
                    adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
                    //and notify database item deleted
                    dbManager.deleteItem(items.get(viewHolder.getAdapterPosition()).getItemName());
            }

            @Override
            public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
            {
                return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
                        ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.LEFT);
            }
        };

最佳答案

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            int swipeFlags = ItemTouchHelper.LEFT;
            return makeMovementFlags(dragFlags, swipeFlags);
        }

关于java - 滑动删除 Android recyclerview 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117999/

相关文章:

java - 我应该将 jackson 的 ObjectMapper 声明为静态字段吗?

java - 注册后按返回键进入登录界面

java - 通过在没有 SharedPreferences 的情况下使用 Google 登录自动登录

android - 在 Activity 之间滑动

Java GUI : Image will be overwritten, 路径相同 -> 在框架中显示它(图像仍然相同)

java - 多态反序列化 jackson

java - 如何确定android中的触摸持续时间

Android应用程序背景不是全屏

jquery - 如何使用 jquery mobile 从一个 html 页面滑回到另一页面

android - 在 ViewPager 中应用时在 Recycler 中滑动