情境
如果要像這樣操作RecyclerView, 其實這是它本身的效果, 設定幾個參數就可輕鬆達成。
完整程式碼
你可以直接到github上面下載或者觀看
https://github.com/givemepassxd999/RecyclerViewAdvancedDemo
程式碼說明
一開始先設定gradle
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:appcompat-v7:23.+'
compile 'com.android.support:recyclerview-v7:23.+'
compile 'com.android.support:cardview-v7:+'
我們可以看到主要作用在ItemTouchHelper的callback 方法內,
一開始要傳入上下移動的參數(drag)跟左右滑動的參數(swip),
一旦設定好了, 就可以使用內建的方式。
ItemTouchHelper.Callback mCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.START|ItemTouchHelper.END) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
myAdapter.notifyItemMoved(fromPosition, toPosition);
return true;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(getDragDirs(recyclerView, viewHolder), getSwipeDirs(recyclerView, viewHolder));
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
myDataset.remove(position);
myAdapter.notifyItemRemoved(position);
}
};
ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(mCallback);
mItemTouchHelper.attachToRecyclerView(mList);
新增資料的部分透過Floating Action Button
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myDataset.add(1, String.valueOf(myDataset.size() + 1));
myAdapter.notifyItemInserted(1);
}
});
可以參考如何使用Floating Action Button
這樣就是一個簡單的新增刪除移動RecyclerView Item的範例了。
RecyclerView系列可以參考
如何使用RecyclerView
如何使用RecylerView+CardView
如何使用RecyclerView-控制LayoutManager
如何使用RecyclerView-左右滑刪除+移動位置