接续昨天的RecyclerView,今天来让RecyclerView的功能变得更完善,今天要讲的是ItemTouchHelper。ItemTouchHelper可以让使用者和在RecyclerView的资料互动,今天要来做的是移动资料和实现左滑删除的功能,话不多说,首先最基本的RecyclerView和昨天相同,包括引用套件和设定Adapter,这里我就不多做讲解,有需要的可以参考前一篇。直接在昨天的MainActivity中加入以下函数。
private void recyclerViewAction(RecyclerView recyclerView,
final ArrayList<String> choose,final MyAdapter adapter){
ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull
RecyclerView.ViewHolder viewHolder) {
//加入需要移动的方向,有分dragFlags和swipeFlags
return makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN ,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
}
@Override
//对资料移动作设定
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull
RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
int position_dragged = viewHolder.getAdapterPosition(); //选取的位置
int position_target = target.getAdapterPosition(); //放置的位置
//交换阵列中两资料位置,choose为阵列
Collections.swap(choose,position_dragged,position_target);
//告知配适器资料有更换
adapter.notifyItemMoved(position_dragged,position_target);
return false;
}
@Override
//对滑动做功能设定
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
switch(direction){
case ItemTouchHelper.LEFT: //资料左滑
case ItemTouchHelper.RIGHT:
choose.remove(position); //移除资料
adapter.notifyItemRemoved(position); //告知配适器资料有更换
if(position!=choose.size()){
//开始改变的位置和总共被影响的位置数量,相当重要否则资料的position不会更改
//刮号内是(改变的位置,受影响的数量)
adapter.notifyItemRangeChanged(position,choose.size()-position);
}
break;
}
}
@Override
//如果希望加上图片则需要以下
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c,recyclerView,viewHolder,dX,dY
,actionState,isCurrentlyActive)
//设定图的背景颜色,也可使用getResourses.getColor(id)
.addBackgroundColor(ContextCompat.getColor(MainActivity.this,
android.R.color.holo_red_dark))
//设定图片
.addActionIcon(R.drawable.ic_baseline_delete_24)
.create()
.decorate();
//拖曳状态下不做改变需要呼叫父类别的方法
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState,
isCurrentlyActive);
}
});
helper.attachToRecyclerView(recyclerView); //绑上recyclerView
}
}
今天ItemTouchHelper就讲到这边,谢谢大家~
>>: 【18】GlobalAveragePooling 与 Flatten 的差异与比较
前言 FF14是一款热门MMORPG类型游戏,近几个月人气甚至打败昔日的MMO霸主魔兽世界 目前主线...
我们昨天撰写完serviceImpl还缺少一个interface, 所以今天把ShioajiServ...
题号:73 标题:Set Matrix Zeroes 难度:Medium Given an m x ...
课程目标 了解软件架构师所应具备的技能与素养,分析与规划软件架构模型,撰写符合国际标准的SAD (S...
前面我们虽然有讲到除了基本的数值类型资料以外,一共主要会有文字、图片、声音这三大类型,而在数值类型的...