【Android】アクティビティの遷移、インテントの受け渡しをする方法


今回はアクティビティの遷移の方法を書いてみたいと思います。

画面を遷移する時にはインテント(Intent)というしくみを使うようですね。

インテントには暗黙的Intent明示的Intentという二種類あるみたいです、
今回は明示的Intentを使って簡単なサンプルを作ってみました。



参考した書籍はいつものこちらです。








AndroidManifest.xmlにアクティビティを追加する


2つ目のアクティビティとなる NextActivity を追加する準備として、
AndroidManifest.xmlを編集します。

        <activity
            android:name=".Sample002Activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".NextActivity" />
    </application>
</manifest>


新たに作られたアクティビティ用のクラスを作成

srcディレクトリに NextActivity.java を作成します。
public class NextActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}



インテント(Intent)を使用して画面を遷移する


Sample002Activity から NextActivity に画面遷移する場合は
以下のようなコードを書きます。

Intent intent = new Intent( Sample002Activity.this, NextActivity.class );
startActivity( intent );






ボタンを押すと画面遷移するだけのサンプル


・Sample002Activity.java
public class Sample002Activity extends Activity {

  LinearLayout ll;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);

        Button button = new Button(this);
        button.setText("ボタンを押すと画面遷移します。");
        ll.addView( button );

        button.setOnClickListener( new ClickListener() );
    }

    class ClickListener implements OnClickListener{
      public void onClick( View v){
        //インテント生成
        Intent intent = new Intent( Sample002Activity.this, NextActivity.class );
        startActivity( intent );
      }
    }
}






・NextActivity.java
public class NextActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);
        //送られてきた値を表示
        TextView tv = new TextView( this );
        tv.setText( "画面を遷移しました。" );
        ll.addView( tv );
    }
}



【実行結果】

sample002実行結果

遷移元のアクティビティ



sample002_1実行結果

遷移先のアクティビティ



値の受け渡しをする場合


Intentに値をセットするとデータのやりとりができるみたいです。

・遷移元のアクティビティで値を渡す
Intent intent = new Intent( Sample002Activity.this, NextActivity.class );
intent.putExtra("result", 1771 );
startActivity( intent );



・遷移先のアクティビティで値を受け取る
Intent intent = getIntent();
int    result = intent.getIntExtra( "result", 0 );



元のアクティビティに値を返す場合


・遷移元のアクティビティに結果が帰ってきた時の処理を追加する
    public void onActivityResult( int reqcode, int result, Intent intent ){
        if( reqcode == 0 && result == RESULT_OK){
    	    return_int = intent.getIntExtra( "return", 0 );
        }
    }



・遷移先のアクティビティに結果を返す処理を追加する
Intent intent = getIntent();
intent.putExtra("return", 104 );
setResult( RESULT_OK, intent );
finish();




インテントを使いデータの受け渡しをするサンプル

・Sample002Activity.java
public class NextActivity extends Activity{

  Intent intent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);

        //前の画面から送られてきた値を取得
        intent = getIntent();
        int    result =   intent.getIntExtra( "result", 0 );

        //送られてきた値を表示
        TextView tv = new TextView( this );
        tv.setText( "画面を遷移しました。\n前の画面から受け取った値は" + result + "です。" );

        ll.addView( tv );

        Button button = new Button(this);
        button.setText("元のアクティビティに値を戻して終了します。");
        ll.addView( button );

        button.setOnClickListener( new ClickListener() );
    }
    class ClickListener implements OnClickListener{
      public void onClick( View v){
        intent.putExtra("return", 104 );
        setResult( RESULT_OK, intent );
        finish();
      }
    }
}



・NextActivity.java
public class Sample002Activity extends Activity {

  LinearLayout ll;
  int return_int;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);

        Button button = new Button(this);
        button.setText("次のアクティビティに値を渡します。");
        ll.addView( button );




        button.setOnClickListener( new ClickListener() );
    }

    class ClickListener implements OnClickListener{
      public void onClick( View v){
        //インテントのインスタンス生成
        Intent intent = new Intent( Sample002Activity.this, NextActivity.class );
        intent.putExtra("result", 1771 );
        startActivityForResult( intent , 0 );
      }
    }

    public void onActivityResult( int reqcode, int result, Intent intent ){
      if( reqcode == 0 && result == RESULT_OK){
        return_int = intent.getIntExtra( "return", 0 );
            //戻ってきた値を表示用テキストビュー
        TextView tv = new TextView( this );
            tv.setText( "前の画面から戻ってきた値は" + return_int + "です。" );
            ll.addView( tv );
      }
    }

}



【実行結果】
sample002_2実行結果

sample002Activity



sample002_3実行結果

NextActivity



sample002_4実行結果

値を返されたsample002Activity


関連記事

【Android】アクティビティの遷移、インテントの受け渡しをする方法” への1件のコメント

  1. ピンバック: 【andoird】サンプルアプリ第2弾「巫女さんおみくじ」公開しました | 桜花満開