建设网站出现400错误百度seo排名曝光行者seo
文章目录
- 前言
- 一、效果图
- 二、实现步骤
- 1.xml布局
- 2.activity代码
- 3.adapter
- 总结
前言
随着需求的变化,很多地方需要加拖动改变顺序的需求,用RecyclerView就可以实现列表拖动排序,列如像朋友圈图片拖动排序,或者音乐播放器列表拖动排序,我这里没有弄GIF图,截图就是正在拖动的效果。
一、效果图
二、实现步骤
1.xml布局
代码如下(示例):
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:layout_marginRight="5dp"android:layout_marginBottom="12dp"android:overScrollMode="never" />
2.activity代码
代码如下(示例):
private lateinit var list_view: RecyclerViewprivate lateinit var listbean: MutableList<String>private lateinit var adapter: IntelligentReplyAdapter//一排显示多个需要全局定义,不然每次排序后都要加载一次空隙就越来越大,正常列表显示一个不需要定义这个private lateinit var itemDecoration: RecyclerView.ItemDecorationitemDecoration = SpacesItemDecoration(20)listbean = mutableListOf()for (i in 1..6) {listbean.add("$i 号回复组名称")}list_view = findViewById(R.id.list_view)list_view.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false) //竖向显示// 设置LayoutManager为GridLayoutManager,每行3个item -->一排显示多个需要//val layoutManager = GridLayoutManager(this, 3)//list_view.addItemDecoration(itemDecoration)//list_view.layoutManager = layoutManageradapter = IntelligentReplyAdapter(listbean, this)list_view.adapter = adapter//RecyclerView实现拖拽实现 设置ItemTouchHelperval callback: ItemTouchHelper.Callback = object : ItemTouchHelper.Callback() {override fun getMovementFlags(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder): Int {val dragFlags =ItemTouchHelper.UP or ItemTouchHelper.DOWN or ItemTouchHelper.LEFT or ItemTouchHelper.RIGHTreturn makeMovementFlags(dragFlags, 0) // 允许上下左右拖拽}override fun onMove(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder): Boolean {val toPositioncc = viewHolder.adapterPosition// 检查目标位置是否是最后一个位置if (toPositioncc == (adapter.itemCount - 1)) {return false // 不允许移动到最后一个位置}val toPosition = viewHolder.adapterPositionval fromPosition = target.adapterPosition// 交换数据集中的元素位置Collections.swap(listbean, fromPosition, toPosition)// 通知Adapter数据已更改adapter.notifyItemMoved(fromPosition, toPosition)return true}override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {// 不处理滑动事件,如果需要可以处理删除逻辑}}val itemTouchHelper = ItemTouchHelper(callback)itemTouchHelper.attachToRecyclerView(list_view)
3.adapter
代码如下(item的xml布局就补贴了):
/*** 作者:CaoLiulang* ❤* Date:2024/12/24* ❤* 模块 智能回复adapter*/
public class IntelligentReplyAdapter extends RecyclerView.Adapter<IntelligentReplyAdapter.ViewHolder> {private List<String> list;private Context context;public IntelligentReplyAdapter(List<String> list, Context context) {this.list = list;this.context = context;}/*** 加载更多** @param mPageList*/public void setData(List<String> mPageList) {try {if (mPageList != null) {int previousSize = 0;try {previousSize = list.size();} catch (Exception e) {previousSize = 0;}int sizez = previousSize + 2;list.addAll(mPageList);notifyItemRangeInserted(sizez, mPageList.size());}} catch (Exception e) {e.printStackTrace();}}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.intelligentreply_item, parent, false);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;}/*** 类似GetView** @param holder* @param position*/@Overridepublic void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {holder.text_name.setText(list.get(position));}//添加元素,需要告诉UI线程布局的变动public void update() {notifyDataSetChanged();}/*** 长度** @return*/@Overridepublic int getItemCount() {return list.size();}/*** 初始化组件*/class ViewHolder extends RecyclerView.ViewHolder {TextView text_name;public ViewHolder(final View itemView) {super(itemView);text_name = itemView.findViewById(R.id.text_name);}}
总结
实现列表拖拽排序其实很简单,RecyclerView正常加载数据,然后去设置ItemTouchHelper就可以了,是不是很简单呢。