这篇文章主要为大家详细介绍了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侧滑删除与拖拽
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。