今回はアクティビティの遷移の方法を書いてみたいと思います。
画面を遷移する時にはインテント(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 ); } }
【実行結果】
値の受け渡しをする場合
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.javapublic 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 ); } } }
【実行結果】
ピンバック: 【andoird】サンプルアプリ第2弾「巫女さんおみくじ」公開しました | 桜花満開