Android Studioで最初のアクティビティに遷移する方法
最初の画面に戻りたい
Androidアプリで複数の画面を作る場合、1回の操作で最初の画面に戻りたいことがあります(「TOPへ戻る」「タイトル画面に戻る」ボタンなど)。
今回はその方法について説明したいと思います。
アクティビティ間でデータの受け渡しを行う方法 - Android Studioでアプリ開発!で使ったプロジェクトを元に実装していきます。
完成イメージ
ActivityFirst → ActivitySecond → ActivityThird → ActivityFirst と遷移していきます。各アクティビティ間で「遷移した回数」を受け渡し、onCreate() で回数を +1 し、Toast で表示します。今回の方法では ActivityThird → ActivityFirst に遷移しても Toast は表示されません。また、「遷移した回数」は 1 に戻ります。
ActivityThird を追加する
Android Studioで Activity をプロジェクトに追加する - Android Studioでアプリ開発!を参照してください。
ActivityThird のレイアウトを設定する
ActivityFirst に遷移するボタンとクリックイベント時に呼ばれるメソッドを記述しています。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ActivityThird"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/lbl_btnToFirst" android:id="@+id/btnToFirst" android:onClick="onClick" /> </RelativeLayout>
プログラムを記述する
ActivityFirst に変更はありません。
ActivitySecond は ActivityThird に遷移するように変更します。
package com.example.transitiontest; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.content.Intent; import android.widget.Toast; public class ActivitySecond extends Activity { private int mTransitionCount; // 遷移した回数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // Intent を取得する Intent intent = getIntent(); // キーを元にデータを取得する(データがない場合、第2引数の 0 が返る) mTransitionCount = intent.getIntExtra("TransitionCount", 0); // 遷移した回数を +1 する mTransitionCount++; // 遷移した回数を Toast で表示する Toast toast = Toast.makeText(this, String.format("遷移した回数:%d", mTransitionCount), Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 0, 200); toast.show(); } // 省略 public void onClick(View view){ switch (view.getId()){ case R.id.btnToThird: // Intent のインスタンスを取得する Intent intent = new Intent(this, ActivityThird.class); // 渡したいデータとキーを指定する intent.putExtra("TransitionCount", mTransitionCount); // 遷移先の画面を呼び出す startActivity(intent); break; } } }
ActivityThird は ActivityFirst に遷移するように記述します。重要なのは Intent にフラグを付加していることです。FLAG_ACTIVITY_CLEAR_TOP で ActivityFirst より上に存在するアクティビティをクリアします。FLAG_ACTIVITY_SINGLE_TOP で既に存在する ActivityFirst を再利用します。ActivityFirst の onCreate() は呼ばれません。
このようにフラグを付加することにより、最初の画面に戻ることができます。また、端末の「戻る」ボタンを押しても ActivityFirst から ActivityThird に遷移することはできなくなります。
package com.example.transitiontest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.example.transitiontest.R; public class ActivityThird extends Activity { private int mTransitionCount; // 遷移した回数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); // Intent を取得する Intent intent = getIntent(); // キーを元にデータを取得する(データがない場合、第2引数の 0 が返る) mTransitionCount = intent.getIntExtra("TransitionCount", 0); // 遷移した回数を +1 する mTransitionCount++; // 遷移した回数を Toast で表示する Toast toast = Toast.makeText(this, String.format("遷移した回数:%d", mTransitionCount), Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 0, 200); toast.show(); } // 省略 public void onClick(View view){ switch (view.getId()){ case R.id.btnToFirst: // Intent のインスタンスを取得する(最初の画面) Intent intent = new Intent(this, ActivityFirst.class); // 渡したいデータとキーを指定する intent.putExtra("TransitionCount", mTransitionCount); // ActivitySecond と ActivityThird を消す intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // ActivityFirst を再利用する(onCreate() は呼ばれない) intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); // 遷移先の画面を呼び出す startActivity(intent); break; } } }
以上の実装を行うことにより、冒頭の完成イメージのように動作します。
まとめ
複数の画面がある場合に最初の画面に戻る方法を説明しました。肝になるのは Intent にフラグを付加することです。
Androidアプリを作る場合に最初の画面に戻る操作は比較的よく使うと思います。実装は難しくないのでぜひ活用してみてください。
Android StudioではじめるAndroidプログラミング入門
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2014/04
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: 柴田文彦,川口仁
- 出版社/メーカー: インプレス
- 発売日: 2014/01/16
- メディア: Kindle版
- この商品を含むブログ (1件) を見る