画面遷移(メインとサブ画面の値の受け渡し)とライフサイクル [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] |
公開日:2018年05月18日 最終更新日:2018年05月20日
記事NO:02656
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









