欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RecycleView实现item侧滑删除与拖拽

程序员文章站 2022-06-17 09:37:27
本文实例为大家分享了recycleview实现item侧滑删除与拖拽的具体代码,供大家参考,具体内容如下一、添加依赖// 侧滑删除依赖implementation 'com.yanzhenjie.re...

本文实例为大家分享了recycleview实现item侧滑删除与拖拽的具体代码,供大家参考,具体内容如下

一、添加依赖

// 侧滑删除依赖
implementation 'com.yanzhenjie.recyclerview:support:1.3.2'

二、布局文件

这里使用的的控件是: com.yanzhenjie.recyclerview.swiperecyclerview

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".mainactivity">
 
 <com.yanzhenjie.recyclerview.swiperecyclerview
  android:id="@+id/srv"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

</relativelayout>

三、代码实现

import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.support.v7.widget.divideritemdecoration;
import android.support.v7.widget.linearlayoutmanager;
import android.support.v7.widget.recyclerview;

import com.google.gson.gson;
import com.yanzhenjie.recyclerview.swiperecyclerview;
import com.yanzhenjie.recyclerview.touch.onitemmovelistener;

import java.util.arraylist;
import java.util.collections;
import java.util.list;

public class mainactivity extends appcompatactivity {
 swiperecyclerview srv; //控件
 list<javabean.databean> dataall = new arraylist<>(); //存数据的集合
 myadapter myadapter; //适配器

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);

  //初始化控件
  initview();

  //得到数据, 数据可以模拟, 不在展示
  initdata();

  //监听事件
  initlistener();
 }

 // todo 3 监听事件
 private void initlistener() {
  srv.setitemviewswipeenabled(true); //侧滑删除 默认关闭
  srv.setlongpressdragenabled(true); //拖拽排序 默认关闭
  // 拖拽监听
  srv.setonitemmovelistener(new onitemmovelistener() {
   // 此方法在item拖拽交换位置时被调用。
   @override
   public boolean onitemmove(recyclerview.viewholder srcholder, recyclerview.viewholder targetholder) {
    // 第一个参数是要交换为之的item,第二个是目标位置的item。
    int adapterposition = srcholder.getadapterposition();
    int adapterposition1 = targetholder.getadapterposition();
    // swap交换数据,并更新adapter。
    collections.swap(dataall, adapterposition, adapterposition1);
    myadapter.notifyitemmoved(adapterposition, adapterposition1);

    return true;// 返回true,表示数据交换成功,itemview可以交换位置。
   }

   // 此方法在item在侧滑删除时被调用。
   @override
   public void onitemdismiss(recyclerview.viewholder srcholder) {
    // 从数据源移除该item对应的数据,并刷新adapter。
    int position = srcholder.getadapterposition();
    dataall.remove(position);
    myadapter.notifyitemremoved(position);
   }
  });
 }

 //todo 2 得到数据
 private void initdata() {
  //这里使用回调的方式得到的数据
  okgodata.getinstance().getdatabyokgo(new datacallback() {
   @override
   public void getdatajson(string json) {
    list<javabean.databean> data = new gson().fromjson(json, javabean.class).getdata();
    dataall.clear();
    dataall.addall(data);
    myadapter.setnewdata(dataall);
    myadapter.notifydatasetchanged(); //适配器通知更新
   }
  });
 }

 //todo 1 初始化控件
 private void initview() {
  srv = findviewbyid(r.id.srv); //找到控件

  // 添加下划线
  divideritemdecoration decoration = new divideritemdecoration(this, divideritemdecoration.vertical);
  srv.additemdecoration(decoration);
  //添加适配器
  myadapter = new myadapter(r.layout.layout_adapter_item, dataall);
  srv.setadapter(myadapter);

  //添加布局管理 必须添加不然无法显示
  linearlayoutmanager layoutmanager = new linearlayoutmanager(this, linearlayoutmanager.vertical, false);
  srv.setlayoutmanager(layoutmanager);
 }
}

其他功能具体实现请参考:recycleview侧滑删除与拖拽

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。