TOP > カテゴリ > 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