Android RecyclerView 侧滑菜单、长按拖拽

news/2024/11/29 21:26:27/

SwipeRecyclerView

支持侧滑菜单、长按拖拽、Header、Footer、Loading(加载更多)
注意:不持支com.android.support项目。如果要使用可以下载源码自己AndroidStudio转support使用。

预览

在这里插入图片描述

Fix 2022.7.25.1

1.分页插入数据类型异常bug
2.扩展类及其监听修改
3.包名修改
4.SwipeRecyclerAdapter数据绑定的方法重写;
5.SwipeRecyclerView点击和侧滑删除冲
6.分页动画取消;
7.侧滑RecyclerView新增侧滑距离1/2的动画判断;

资源

名字资源
AARswipe.aar
GitHubSwipeRecyclerView
GiteeSwipeRecyclerView

Maven

1.build.grade

allprojects {repositories {...maven { url 'https://jitpack.io' }}
}

2./app/build.grade

dependencies {implementation 'com.github.RelinRan:SwipeRecyclerView:2022.7.25.1'
}

侧滑功能

xml布局

<androidx.ui.widget.SwipeRecyclerViewandroid:id="@+id/rv_content"android:layout_width="match_parent"android:layout_height="match_parent" />

Adapter

注意:继承SwipeRecyclerAdapter ,为item泛型

public class SwipeItemAdapter extends SwipeRecyclerAdapter<String> {public SwipeItemAdapter(Context context) {super(context);}@Overrideprotected int getItemLayoutResId(int viewType) {// TODO: 普通Item布局 return R.layout.item_text;}@Overrideprotected int getItemSwipeMenuLayoutResId() {// TODO: 侧滑菜单栏布局(例如:编辑、删除)// 注意xml高度:MATCH_PARENT,宽度:WRAP_CONTENTreturn R.layout.item_swipe_menu;}@Overrideprotected void onSwipeBindViewHolder(ViewHolder holder, int position) {super.onSwipeBindViewHolder(holder, position);// TODO: 普通Item + 侧滑view数据绑定逻辑holder.addItemClick(R.id.tv_delete);holder.addItemClick(R.id.tv_edit);TextView textView = holder.find(R.id.tv_item_text);textView.setText(getItem(position));}}

Activity|Fragment

SwipeRecyclerView rv_content = findViewById(R.id.rv_content);
//设置侧滑菜单可用,此方法需要SwipeItemAdapter.setShowSwipe(true);
rv_content.setSwipeEnable(false);
//适配器
SwipeItemAdapter adapter = new SwipeItemAdapter(this);
//设置侧滑菜单可用
adapter.setShowSwipe(true);
//设置此方法之前,在SwipeItemAdapter中holder.addItemClick(R.id.xxx);
adapter.setOnItemClickListener((adapter, v, position) -> {switch (v.getId()){case R.id.tv_edit:break;case R.id.tv_delete:adapter.removeItem(position);//注意:删除item,一定需要调用此方法。rv_content.closeSwipe();break;}
});

长按拖拽

RecyclerView

RecyclerView rv_content = findViewById(R.id.rv_content);
SwipeItemTouchHelperCallback callback = new SwipeItemTouchHelperCallback();
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(rv_content);

SwipeRecyclerView

SwipeRecyclerView rv_content = findViewById(R.id.rv_content);
rv_content.setLongPressDragEnabled(true);

Header功能

Header功能支持SwipeRecyclerView、RecyclerView

代码设置

SwipeItemAdapter adapter = new SwipeItemAdapter(this);
adapter.setHeaderArgs(xxxx);
View headerView = LayoutInflater.from(context).inflate(R.layout.xxx,null);;
adapter.setHeaderView(headerView);

Xml设置

public class SwipeItemAdapter extends SwipeRecyclerAdapter<String> {public SwipeItemAdapter(Context context) {super(context);}@Overridepublic int getHeaderLayoutResId() {// TODO: Header布局return R.layout.xxx;}@Overrideprotected void onHeaderBindViewHolder(ViewHolder holder, Bundle args) {super.onHeaderBindViewHolder(holder, args);// TODO: Header数据绑定逻辑,args数据来源于setHeaderArgs(xxx);}
}

Footer功能

Footer功能支持SwipeRecyclerView、RecyclerView

代码设置

SwipeItemAdapter adapter = new SwipeItemAdapter(this);
adapter.setFooterArgs(xxx);
View footerView = LayoutInflater.from(context).inflate(R.layout.xxx,null);;
adapter.setFooterView(footerView);

Xml设置

public class SwipeItemAdapter extends SwipeRecyclerAdapter<String> {public SwipeItemAdapter(Context context) {super(context);}@Overridepublic int getFooterLayoutResId() {// TODO: Header布局return R.layout.xxx;}@Overrideprotected void onFooterBindViewHolder(ViewHolder holder, Bundle args) {super.onFooterBindViewHolder(holder, args);// TODO: Footer数据绑定逻辑,args数据来源于setFooterArgs(xxx);}
}

Loading功能(加载更多)

Loading功能支持SwipeRecyclerView、RecyclerView

代码设置

SwipeItemAdapter adapter = new SwipeItemAdapter(this);
adapter.setLoadingArgs(xxxx);
View loadingView = LayoutInflater.from(context).inflate(R.layout.xxx,null);;
adapter.setFooterView(loadingView);

Xml设置

public class SwipeItemAdapter extends SwipeRecyclerAdapter<String> {public SwipeItemAdapter(Context context) {super(context);}@Overridepublic int getLoadingLayoutResId() {// TODO: Loading布局return R.layout.xxx;}@Overrideprotected void onLoadingBindViewHolder(ViewHolder holder, Bundle args) {super.onLoadingBindViewHolder(holder, args);// TODO: Loading数据绑定逻辑,args数据来源于setLoadingArgs(xxx);}
}

获取触摸事件助手

 ItemTouchHelper getItemTouchHelper();

设置Item触摸助手回调

 setSwipeItemTouchHelperCallback(SwipeItemTouchHelperCallback callback);

设置是否自动处理移动逻辑

setDragMoveAuto(boolean dragMoveAuto);

设置是否自动处理选择逻辑

setSelectedAuto(boolean selectedAuto);

设置是否可长按拖拽

setLongPressDragEnabled(boolean longPressDragEnabled) ;

设置拖动标识

setDragFlags(int dragFlags);

设置滑动标识

setSwipeFlags(int swipeFlags);

设置触摸选中监听

setOnItemTouchSelectedChangedListener(OnItemTouchSelectedChangedListener listener);

设置长按拖拽移动监听

setOnItemTouchMoveListener(OnItemTouchMoveListener listener);

触摸横向滑动完成监听

setOnItemTouchSwipedListener(OnItemTouchSwipedListener  listener);

打开侧滑菜单

openSwipe();

关闭侧滑菜单

closeSwipe();

http://www.ppmy.cn/news/278586.html

相关文章

RecyclerView侧滑删除

自定义 RecyclerView 侧滑删除&#xff0c;下面是左滑删除和右滑删除的效果图&#xff1a; CSDN下载地址&#xff1a;https://download.csdn.net/download/wuqingsen1/10782610 GitHub下载地址&#xff1a;https://github.com/wuqingsen/RecyclerViewSide 下面是主要内容&…

Android-屏幕左右侧滑(二)

第二种方式我们介绍的是使用Android源生控件android.support.v4.widget.DrawerLayout来实现屏幕的左侧滑和右侧滑&#xff08;其中包括点击侧滑和手动滑动侧滑&#xff09;&#xff0c;还可以用代码来控制打开和关闭手动侧滑: 先付上两张效果图供参考&#xff0c;如下&#xf…

android studio 侧滑菜单,Android Studio实现侧滑菜单(最佳)

在CSDN中我们会看到很多侧滑的案例,但是有的不是少这个就是少那个,很浪费时间,所以我们要仔细看看代码全不全。在多种APP里,比如QQ的主页面就有向右滑动出现菜单栏的情况,今天就来看一下如何实现这种功能。 我的工程文件布局如下: 我们可以看到,侧滑菜单主要由两个页面组…

Android BaseRecyclerViewAdapterHelper拖动和侧滑删除

1.适配器 adapter继承BaseItemDraggableAdapte public class ItemDragAdapter extends BaseItemDraggableAdapter<BsInventoryBeanSub, BaseViewHolder> {//BsInventoryBeanSub是我的Bean类public ItemDragAdapter(List<BsInventoryBeanSub> data) {super(R.layo…

android侧滑菜单的监听,Android侧滑菜单控件DrawerLayout使用详解

DrawerLayout是Android V4包下一个带有侧滑功能的布局控件,可以根据手势展开与隐藏侧边栏,也可以随着侧边栏的点击改变主界面区的内容。并且只需要按照DrawerLayout规定的布局格式进行布局,即可实现左右侧滑效果。 一、约定的抽屉布局 DrawerLayout的布局一般分为三个部分:…

Android-侧滑菜单(三)

新整理的仿QQ侧滑菜单实现的例子&#xff0c;使用android.support.v4.widget.DrawerLayout和android.support.design.widget.NavigationView实现的&#xff0c;下面先上两张效果图&#xff1a; 效果图也看到了&#xff0c;那么咱们废话不多说&#xff0c;直接上代码&#xff1a…

Compose 实现页面侧滑返回

最近研究了一下&#xff0c;使用Compose如何去做类似ios的全屏侧滑返回效果&#xff0c;下面展示成果&#xff1a; 总共需要几个功能进行搭配使用&#xff1a; 1.Accompaint的Pager模块 2.通过反射使当前窗口透明以及不透明 思路分析&#xff1a; pager类似于android原生的…

RSA算法基础原理

目录 一、简介二、缺点三、数论基础1. 素数2. 模运算3. 互质关系4. 欧拉函数第一种情况第二种情况第三种情况第四种情况第五种情况 5. 欧拉定理6. 模反元素 四、RSA密钥生成步骤1. 随机选择两个不相等的质数p和q。2. 计算p和q的乘积n。3. 计算n的欧拉函数φ(n)。4. 随机选择一个…