RecycleView實現item側滑刪除與拖拽
阿新 • • 發佈:2020-11-30
本文例項為大家分享了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側滑刪除與拖拽
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。