ホーム > カテゴリ > Java・Android >

画面遷移(メインとサブ画面の値の受け渡し)とライフサイクル [Android Studio]

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

アクティビティ(Google)





関連記事



公開日:2018年05月18日 最終更新日:2018年05月20日
記事NO:02656


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律