利用RecycleView怎么实现一个侧滑删除功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一、添加依赖
// 侧滑删除依赖
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怎么实现一个侧滑删除功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。