1. 程式人生 > 程式設計 >RecycleView實現item側滑刪除與拖拽

RecycleView實現item側滑刪除與拖拽

本文例項為大家分享了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側滑刪除與拖拽

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。