画面遷移(メインとサブ画面の値の受け渡し)とライフサイクル [Android Studio]
目次
1. 事前準備
2. 画面設計
3. コーディング
4. ライフサイクル
1. 事前準備
メニューの[ファイル][新規]の「新規プロジェクト」でプロジェクトを作成します。その時にアクティビティは「空のアクティビティ」を選択します。
※アクティビティ名は「MainActivity」とします。
サブ画面を追加する
メニューの[ファイル][新規][アクティビティ]の「空のアクティビティ」を選択します。アクティビティ名は「SubActivity」とします。
これで2つの画面が作成されました。
2. 画面設計
[メイン画面]
文字列はリソース(strings.xml)ではなくハードコードでOKです。
[サブ画面]
3. コーディング
Androidの画面遷移は「インテント」(Intentクラス)を使用します。今回は画面間で渡す値は1つですが、複数でもOKです。
[MainActivity.java]
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { // 画面間でやりとりする任意のコード private final int FORM_REQUESTCODE = 1000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText et = findViewById(R.id.editText); // インテントの準備 Intent intent = new Intent(MainActivity.this,SubActivity.class); // サブ画面に渡す値 intent.putExtra("main_text",et.getText().toString()); // サブ画面を表示する startActivityForResult(intent,FORM_REQUESTCODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // サブ画面からの戻り if(requestCode == FORM_REQUESTCODE){ if (resultCode == RESULT_OK) { // サブ画面から戻り値を取得して表示する TextView et = findViewById(R.id.textView); et.setText(data.getStringExtra("sub_text")); } } } }
[SubActivity.java]
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.TextView; public class SubActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); // メイン画面からデータを受け取り表示する Intent intent = getIntent(); String str = intent.getStringExtra("main_text"); TextView tx = findViewById(R.id.textView2); tx.setText(str); // 自作の戻るボタン findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("sub_text","ボタンから戻りました。"); setResult(RESULT_OK, intent); // このアクティビティを終了する finish(); } }); // ライフサイクルのテスト用 Log.i("ライフサイクル","onCreate()"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // スマホの下部にある三角のBACKキーイベント if(keyCode == KeyEvent.KEYCODE_BACK) { Intent intent = new Intent(); intent.putExtra("sub_text","BACKキーから戻りました。"); setResult(RESULT_OK, intent); } return super.onKeyDown(keyCode, event); } // 以下は、ライフサイクルのテスト用 @Override protected void onStart() { Log.i("ライフサイクル","onStart()"); super.onStart(); } @Override protected void onRestart() { Log.i("ライフサイクル","onRestart()"); super.onRestart(); } @Override protected void onResume() { Log.i("ライフサイクル","onResume()"); super.onResume(); } @Override protected void onPause() { Log.i("ライフサイクル","onPause()"); super.onPause(); } @Override protected void onStop() { Log.i("ライフサイクル","onStop()"); super.onStop(); } @Override protected void onDestroy() { Log.i("ライフサイクル","onDestroy()"); super.onDestroy(); } }
4. ライフサイクル
今回のサブ画面にはAndroidの「画面のライフサイクル」を確認する為に、テスト用のコードが含まれています。
これは実際にエミュレーターでスマホの下部にある「3つのボタン」(戻る、ホーム、マルチタスク)などで確認するとわかりやすいです。
その際にはAndroid Studioの「ログキャット」でログを確認します。Android Studioの下部にあるログキャットタブを選択後に、ログの種類を「Info」、検索キーに「ライフサイクル」を設定します。
このログの種類は次の6種類あります。
Verbose | 詳細 | Log.v() |
---|---|---|
Debug | デバッグ | Log.d() |
Info | 情報 | Log.i() |
Warn | 警告 | Log.w() |
Error | エラー | Log.e() |
Assert | 致命的 | Log.wtf() |
※ログ出力は状況に応じて使い分けてくださいね。
参考URL
関連記事
前の記事: | 各種コントロールの画面設計(ConstraintLayout)とイベント [Android Studio] |
次の記事: | アクションバー(オプションメニュー)とコンテキストメニュー [Android Studio] |