Androidアプリ開発

RecyclerViewのスワイプ操作を無効化

この記事は約7分で読めます。
スポンサーリンク

こんにちは、まっさん(@Tera_Msaki)です。

この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)

普段は仕事部屋の冷蔵庫として愛用してます♪
外出先ではマキタのバッテリでも動作するので、とっても便利♪

◎テーマ
RecyclerViewのスワイプ操作を一時的に無効する

◎ポイント

Andoridアプリの開発で、
リスト表示する場合に、
RecyclerView を使用することが多いと思います。
リストからのデータ削除や画面遷移などをRecyclerにスワイプ操作を実装した場合、
処理中にデータの削除や画面遷移が行われると、
処理の継続性操作性に問題が発生することがあります。
処理の実行中などで、
スワイプ操作を一時的に無効にする仕組みを実装したいと思います。

計測中(STOPボタン表示)に、
その背面に位置するリスト(RecyclerView)のクリック操作とスワイプ操作を無効にする。

◎クリック操作の無効化

RecyclerView(motionView)のsetOnItemClickListener
操作させる条件を記述します。
処理中の判断として、ボタンの
表示タイトルを操作させる条件とします。

        : 
        motionView.setAdapter(motionAdapter);
        motionView.setOnItemClickListener((view, position) -> {
            if (recording.getVisibility() == View.VISIBLE && recording.getText().equals(context.getString(R.string.recording))) {
                // 処理中でない場合の操作
                :
            }
        });
        :

◎スワイプ操作の無効化

RecyclerView(motionView)にアタッチするItemTouchHelpergetMovementFlags
操作させる条件を記述します。
処理中の判断として、ボタンの
表示タイトルを操作させる条件とします。

        :
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
                ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.LEFT) {
            @Override
            public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
                int swipeFlags = recording.getVisibility() == View.VISIBLE && recording.getText().equals(context.getString(R.string.recording)) ? ItemTouchHelper.LEFT : 0;
                return makeMovementFlags(0, swipeFlags);
            }
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
                return false;
            }
            @Override
            public void onSwiped(@NonNull VerticalListView.ViewHolder viewHolder, int direction) {
                // 処理中でない場合の操作
                :
            }
        });
        itemTouchHelper.attachToRecyclerView(motionView);
        :

ブログランキング・にほんブログ村へ

◎これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

初めてのAndroidのアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。

コメント欄

タイトルとURLをコピーしました