今回はアクティビティの遷移の方法を書いてみたいと思います。
画面を遷移する時にはインテント(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.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 );
}
}
}
【実行結果】






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