如何使用RecyclerView-左右滑刪除+移動位置

如何使用RecyclerView-左右滑刪除+移動位置

情境

如果要像這樣操作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-左右滑刪除+移動位置