RecyclerView の使い方、3シリーズ目です。
1シリーズ目:【Android】簡潔に RecyclerView を使う。 - 山崎屋の技術メモ
2シリーズ目:【Android】イメージを含んだリッチな行を持つ RecyclerView - 山崎屋の技術メモ
今回は行をドラッグしたときに行の並べ替えを行いたいと思います。
1シリーズ目、2シリーズ目のソースを流用するのであらかじめ見ておいてください。
完成形
ドラッグして並び替え
かなり簡単です。
MainActivity.java を修正します。
修正前:
package org.yyama.recyclerviewsample; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); String[] myDataset = {"aaa","bbb","ccc"}; RecyclerView.Adapter mAdapter = new MyAdapter(myDataset); recyclerView.setAdapter(mAdapter); } }
修正後:
package org.yyama.recyclerviewsample; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); String[] myDataset = {"aaa","bbb","ccc"}; final RecyclerView.Adapter mAdapter = new MyAdapter(myDataset); recyclerView.setAdapter(mAdapter); RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); recyclerView.addItemDecoration(itemDecoration); // ドラックアンドドロップの操作を実装する ItemTouchHelper itemTouchHelper = new ItemTouchHelper( new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.ACTION_STATE_IDLE) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { final int fromPos = viewHolder.getAdapterPosition(); final int toPos = target.getAdapterPosition(); mAdapter.notifyItemMoved(fromPos, toPos); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { } }); itemTouchHelper.attachToRecyclerView(recyclerView); } }
簡単に説明します。
まず、ItemTouchHelper を new します。
コンストラクタの引数には ItemTouchHelper.SimpleCallback のインスタンスを渡しています。
そして ItemTouchHelper#attachToRecyclerView を呼び出し、RecyclerView に ItemTouchHelper をアタッチしています。
これだけで行をドラックすることにより、並び替えを行うことが出来るようになりました。
まとめ
今回は RecyclerView の行をドラッグして並び替える方法を紹介しました。
それでわ!
- 作者:金田 浩明
- 発売日: 2020/12/19
- メディア: Kindle版
基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン
- 作者:WINGSプロジェクト 齊藤 新三
- 発売日: 2019/07/10
- メディア: Kindle版
作ればわかる!Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門
- 作者:金宏 和實
- 発売日: 2019/06/19
- メディア: Kindle版