Android开发Android开发经验谈Android技术知识

仿QQ左滑删除SwipeMenuRecyclerView

2020-09-13  本文已影响0人  i小灰

上图

image image

第一步,导入依赖包

·Gradle

  implementation 'com.yanzhenjie:recyclerview-swipe:1.1.4'

第二步,引用自定义View:SwipeMenuRecyclerView

  <com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView
      android:id="@+id/swiperecy"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      />

第三步,设置adapter(setAdapter 一定要放在最后)

  mSwiperecy = (SwipeMenuRecyclerView) inflate.findViewById(R.id.swiperecy);
  mSwiperecy.setLayoutManager(new LinearLayoutManager(getActivity()));
  DefaultItemDecoration defaultItemDecoration = new DefaultItemDecoration(Color.GRAY);
  mSwiperecy.addItemDecoration(defaultItemDecoration);
     if (itemDecorationAt == null) {//这个判决解决了每次下拉刷新,重复添加分割线的问题
            mSwiperecy.addItemDecoration(defaultItemDecoration);//添加分割线
        }
        itemDecorationAt = mSwiperecy.getItemDecorationAt(0);
        mSwiperecy.setLongPressDragEnabled(true);// 开启长按拖拽
        //设置添加侧滑按钮
        mSwiperecy.setSwipeMenuCreator(swipeMenuCreator);
        //设置滑动菜单item监听
        mSwiperecy.setSwipeMenuItemClickListener(mMenuItemClickListener);
        list = new ArrayList<>();
        adapter = new RecyAdapter(getActivity(), list);
        mSwiperecy.setAdapter(adapter);

第三步,创建菜单

 private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {

        @Override
        public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            int width = getResources().getDimensionPixelSize(R.dimen.dp_70);
            SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity())
//                    .setBackgroundDrawable(R.drawable.selector_green)// 点击的背景。
                    .setBackground(R.drawable.selector_red)// 点击的背景。
//                    .setImage(R.mipmap.ic_launcher)// 图标
                    .setTextColor(Color.WHITE)
                    .setBackgroundColorResource(R.color.ddd)
                    .setText("    Delete    ") // 文字。
                    .setWeight(width)// 宽度。
                    .setHeight(height); // 高度。
            swipeLeftMenu.addMenuItem(deleteItem);// 添加菜单到左侧。

//
//            SwipeMenuItem completeItem = new SwipeMenuItem(getActivity())
//                    .setBackground(R.drawable.selector_red)
////                    .setImage(R.mipmap.ic_launcher)
//                    .setTextColor(Color.WHITE)
//                    .setBackgroundColorResource(R.color.ddd)
//                    .setText("  完成")
//                    .setWeight(width)
//                    .setHeight(height);
//            swipeRightMenu.addMenuItem(completeItem); // 添加菜单到右侧。

        }
    };

第四步, 菜单点击监听。

   private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() {
       @Override
       public void onItemClick(SwipeMenuBridge swipeMenuBridge) {
           // 任何操作必须先关闭菜单,否则可能出现Item菜单打开状态错乱。
           swipeMenuBridge.closeMenu();
           int direction = swipeMenuBridge.getDirection(); // 左侧还是右侧菜单。
           final int adapterPosition = swipeMenuBridge.getAdapterPosition(); // RecyclerView的Item的position。
           int menuPosition = swipeMenuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。
           switch (menuPosition) {
               case 0:
                   //  删除
                   list.remove(adapterPosition);
                   adapter.notifyDataSetChanged();
                   break;

           }
       }
   };

注意,adapter里继承SwipeMenuRecyclerView,和正常的Adapter一样使用
上一篇下一篇

猜你喜欢

热点阅读