一、
定義一個(gè)接口
public interface TouchBack {
void OnDragItem(int fromposition, int toposition);
void OnDeleteItem(int position);
}
二、
ItemTouchHelper.Callback中的方法馏慨,所以我們首先自定義自己的類(lèi)來(lái)繼承它哥蔚,重寫(xiě)其中方法。首先是getMovementFlags()方法莱坎,這個(gè)方法主要作用是定義移動(dòng)標(biāo)識(shí)衣式,所以針對(duì)拖動(dòng)效果,我們可以首先定義拖動(dòng)標(biāo)識(shí),通過(guò)ItemTouchHelper提供的參數(shù)來(lái)定義
簡(jiǎn)單來(lái)說(shuō): 就是 定義 參數(shù) 提供拖動(dòng)標(biāo)識(shí)檐什;
public class SimpTouchback extends ItemTouchHelper.Callback {
private TouchBack back;
//利用接口回調(diào) 回調(diào)內(nèi)容
public SimpTouchback(TouchBack back) {
this.back = back;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
int drag = ItemTouchHelper.DOWN | ItemTouchHelper.UP; // 上下
int Delete = ItemTouchHelper.LEFT; //向左
return makeMovementFlags( drag, Delete ); //允許上下 向左
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
back.OnDragItem( viewHolder.getAdapterPosition(), viewHolder1.getAdapterPosition() ); //接口回調(diào) 回調(diào) item交換的位置
return true;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { //在這里可以對(duì)itme 做刪除
back.OnDeleteItem( viewHolder.getAdapterPosition() );
}
@Override
public boolean isItemViewSwipeEnabled() { // 是否 對(duì)拖動(dòng)效果 進(jìn)行 屏蔽
return super.isItemViewSwipeEnabled(); //默認(rèn)是不會(huì)屏蔽
}
@Override
public boolean isLongPressDragEnabled() { // 這個(gè)跟上一個(gè)方法的意思差不多是否 對(duì)拖動(dòng)效果 進(jìn)行 屏蔽
return super.isLongPressDragEnabled();//默認(rèn)是不會(huì)屏蔽
}
}
三碴卧、
在適配中 實(shí)現(xiàn)接口 實(shí)現(xiàn)重寫(xiě)其中的方法
例如:
@Override
public void OnDragItem(int fromposition, int toposition) {
Collections.swap( list, fromposition, toposition ); //Collections 是一個(gè)集合的 工具 swap 交換
notifyItemMoved( fromposition, toposition );// 簡(jiǎn)單來(lái)說(shuō)就只刷新這兩個(gè)位置
}
@Override
public void OnDeleteItem(int position) {
list.remove( position ); // 刪除集合中的位置
notifyItemRemoved( position ); // 只刷新 刪除的位置
}
四 、
做完這一系列的 操作 剩下的只有我們的activity了
Myadapter myadapter = new Myadapter( list ); // 這個(gè)不用介紹了吧
mRec.setAdapter( myadapter ); //=_=
mRec.setLayoutManager( new LinearLayoutManager( this ) ); //=_=
mRec.addItemDecoration( new DividerItemDecoration( this, DividerItemDecoration.VERTICAL ) ); //這個(gè)是 給item添加 一條分割線
SimpTouchback simpTouchback = new SimpTouchback( myadapter ); //這個(gè)就是重頭戲了 new 出對(duì)象 這個(gè)就是接口回調(diào)的機(jī)制了
ItemTouchHelper itemTouchHelper = new ItemTouchHelper( simpTouchback );// 通過(guò)我 小幫手 itemtouchHelper
乃正、住册、
itemTouchHelper.attachToRecyclerView( mRec ); // 把我們?cè)O(shè)置的屬性 最終給我們的 Recycler。