アクティビティ切り替えでのBackボタンの検出 - Android

こちらの記事ではアクティビティの切り替え、アクティビティ間の値の受け渡しの方法について紹介しました。
この記事ではアクティビティにてBackボタンをタップして戻った際のBackボタンの検出方法を紹介します。

プロジェクトの作成

こちらの記事で紹介しているプロジェクトと同じものを作成します。

UIの作成

こちらの記事で紹介しているUIと同じものを作成します。

コード

以下のコードを記述します。

MainActivity.java

package com.iPentec.activitychange;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.content.*;
import android.widget.*;

public class MainActivity extends Activity {
  private static final int SUB_ACTIVITY = 101;
  private String ReceiveText="";
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textView1 = (TextView)findViewById(R.id.textView1);
    textView1.setText(ReceiveText);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  public void button1_click(View view){
    EditText editText1 = (EditText)findViewById(R.id.editText1);
    String text = editText1.getText().toString();
    
    Intent intent = new Intent(this, SubActivity.class);
    intent.putExtra("TestData", text);
    startActivityForResult(intent, SUB_ACTIVITY);
  }
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == SUB_ACTIVITY) {
      if(resultCode == RESULT_OK) {
        String text = data.getStringExtra("ReturnData");
        TextView textView1 = (TextView)findViewById(R.id.textView1);
        textView1.setText(text);
      }
      else if (resultCode == RESULT_CANCELED){
        TextView textView1 = (TextView)findViewById(R.id.textView1);
        textView1.setText("バックボタンで戻りました");        
      }
    }
  }
}
解説
コードの大半はこちらの記事と同じため、記事を参照してください。

下記が追加のコードになります。
  else if (resultCode == RESULT_CANCELED){
    TextView textView1 = (TextView)findViewById(R.id.textView1);
    textView1.setText("バックボタンで戻りました");        
  }
呼び出し先アクティビティからリクエストコードを受け取った際、resultCodeを判定し"RESULT_CANCELED"であった場合はバックボタンで画面が戻ったと判定し、TextViewにバックボタンで戻った際にメッセージを表示します。

SubActivity.java

package com.iPentec.activitychange;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.EditText;
import android.view.View;

public class SubActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    
    Intent intent = getIntent();
    String text = intent.getStringExtra("TestData");
    
    EditText editText1 = (EditText)findViewById(R.id.editText1);
    editText1.setText(text);
    
    //デフォルト動作(BACKキー)
    Intent returnIntent = new Intent();
    setResult(RESULT_CANCELED, returnIntent); 
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.sub, menu);
    return true;
  }

  public void button1_click(View view){
    EditText editText1 = (EditText)findViewById(R.id.editText1);
    String text = editText1.getText().toString();

    Intent intent_ret = new Intent();
    intent_ret.putExtra("ReturnData", text);
    setResult(RESULT_OK, intent_ret);
    finish();
  }
}
解説
コードの大半はこちらの記事と同じため、記事を参照してください。
OnCreate
追加はOnCreateの以下のコードです。
  //デフォルト動作(BACKキー)
  Intent returnIntent = new Intent();
  setResult(RESULT_CANCELED, returnIntent); 
アクティビティが作成された際、デフォルトのリクエストコードを準備しています。インテントのインスタンスを作成し、RESULT_CANCELEDフラグでsetResult()メソッドの呼び出しをしています。ボタンをタップしてアクティビティが終了する場合は、setResult(RESULT_OK, intent_ret);により、リクエストコードが"RESULT_OK"に上書きされます。BACKボタンでアクティビティが終了した場合は、"RESULT_CANCELED"のままになります。

実行結果

プロジェクトを実行します。下図の画面が表示されます。


EditTextに文字を入力します。入力後ボタンをタップします。


SubActivityに切り替わりMainActivityで入力した文字がEditTextに表示されています。


端末のBACKボタンを押します。前の画面に戻りボタンの下のTextViewに"バックボタンで戻りました"のメッセージが表示されます。


著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-04
作成日: 2013-03-27
iPentec all rights reserverd.