Androidアプリ開発

画面遷移のヒストリーバック

この記事は約6分で読めます。
記事内に広告が含まれています。
スポンサーリンク

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

この記事のテーマ


タブレイアウトによる画面遷移のヒストリーバック機能を実装する

ナビゲーションバーの戻るボタンのタップで画面をヒストリーバック移します

通信環境など含めたコストパフォーマンスで考えるなら、docomo irumo でしょう♪

irumo

ポイント

Androidのナビゲーションバーには、標準で一番左側にバック(戻る)ボタンが配置されています。
前の画面に戻るためのボタンですが、アプリ側で処理を記述する必要があります。
今回は、TabLayoutViewPager2を使用したタブレイアウトの画面遷移で、戻るボタンによるヒストリーバック機能の実装を紹介いたします。

ヒストリーバック

タブレイアウト画面をもつアプリの画面遷移では、TabLayoutで遷移先を指定し、ViewPager2Fragmentを表示します。
TabLayoutViewPager2をもつActivityで画面遷移やヒストリーバックを処理、Fragmentで画面遷移の履歴を追加します。

ヒストリーバック処理(Activity)

ナビゲーションバーの戻るボタンのフックはonBackPressedを使用しますが、Android14で使用不可になりましたので、OnBackPressedDispatcherを使用します。
画面遷移の履歴では、最新のタブ位置ですので、ひとつ前のタブ位置を使用します。
画面遷移の履歴追加はonResumeを使用していますので。遷移先履歴を削除してから画面遷移を行います。

    …
    public TabLayout                tabs;
    public ViewPager2               pager;
    public List<Integer>            history = new ArrayList<>();
    …

    // onCreate //
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        …

        getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                if (tabs != null) {
                    // 最新履歴を削除
                    if (history.size() > 0) history.remove(history.size() -1);
                    // 遷移先を取得
                    int page = history.size() > 0 ? history.get(history.size() -1) : 0;
                    // 遷移先履歴を削除
                    if (history.size() > 0) history.remove(history.size() -1);
                    // 遷移
                    if (tabs != null) Objects.requireNonNull(tabs.getTabAt(page)).select();
                }
            }
        });
        …

Android14対応(非推奨のonBackPressedの対応)について詳しく知りたい↓↓↓

画面遷移の履歴追加(Fragment)

onResumeで現在のタブ位置(SelectedTabPosition)を画面遷移の履歴を追加します。

    …
    private MainActivity            mainActivity;

    …
    // onCreate //
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mainActivity = (MainActivity) getActivity();
        …
    }

    …
    // onResume //
    @Override
    public void onResume() {
        super.onResume();
        mainActivity.history.add(mainActivity.tabs.getSelectedTabPosition());
        …

サンプルでは、MainActivityの変数を直接操作していますが、MainActivityに画面遷移の履歴追加メソッドを実装して、それを呼び出す実装のほうが、よりスマートだと思います。

今回は、ここまでです。

画面遷移のヒストリーバック機能を実装している Androidアプリです。
戻るボタンのタップで前の画面に戻ります。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

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

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

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

未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク
The Challenge of Second Life

コメント欄