九章:画面遷移を行う

これまで単一の画面(Activity)だけでアプリケーションを動作させてきたが、
開発が進んでくると複数のActivityを用いてアプリケーションを動作させたいという
場面が出てくるかもしれない。

そんなときの為に予め簡単な画面遷移のやり方を覚えておくと多少は役に立つと思う。

とりあえずプロジェクトを作成しておく。

+ 準備
  • 別のAcitivityクラスを追加(SubActivity.java)
 srcフォルダーをクリックするとパッケージが出てくると思うので、そこで右クリックして
 新規→クラスを選択する。
 新規Javaクラス作成ウィンドウが開いたら「名前」でクラスファイル名を設定し、
 次に「スーパークラス」の横から参照をクリックする。すると型を選択してくださいと出るので、
 「activity」と打つと候補が下に出てくるので「Activity」を選択する。
 完了をクリックしてクラスファイルの作成を終了する。

 作成されたSubActivity.javaを見るとクラスがActivityを継承(extends)しているのが分かる。
 ちゃんとアクティビティクラスとして作成されたわけだが、今のままではAndroid側からは
 アクティビティとして認められていない。
 これを認めさせるためにはAndroidManifest.xmlを編集してあげる必要がある。

+ AndroidManifest.xmlの編集
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.tomato.intenttest"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="8"
  9. android:targetSdkVersion="17" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="com.***.intenttest.MainActivity"
  18. android:label="@string/app_name" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21.  
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. <activity
  26. android:name=".SubActivity">
  27. </activity>
  28. </application>
  29.  
  30. </manifest>

新しく追加している部分は25~27行目。AndroidManifest.xmlに
<activity 追加したいアクティビティ名></activity>で記述することでアクティビティを
Andoroid側で認識することが出来るようになる。

これで準備が完了したので、プログラム部分をいじっていく。


+ 遷移元のプログラミング
ボタンを押すことで遷移したいアクティビティに移動するプログラムを作る。
レイアウトのxmlを編集してボタンを配置しておく。

ソース↓
  1. public class MainActivity extends Activity implements OnClickListener{
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7.  
  8. //ボタンのクリックイベントを使えるようにする
  9. Button button = (Button) findViewById(R.id.button);
  10. button.setOnClickListener(this);
  11. }
  12.  
  13. @Override
  14. public void onClick(View v) {
  15. //インテントを使用する
  16. Intent intent = new Intent(MainActivity.this, SubActivity.class);
  17. //新たなアクティビティを開始する
  18. startActivity(intent);
  19. }
  20. }
  21.  


+ 遷移元側の解説
  • インテント
 なんだかとにかく色んなことに使える物。
 今回は単純にアクティビティを移動するためだけに使ったが、この使い方だけでも
 遷移先のアクティビティに情報を渡したりとか出来る(今回はスルーするけど)すごいやつ。
 インテントのインスタンス生成時に第一引数に今いるアクティビティを記述し、第二引数に
 移動したい先のクラス名.classと記述したらstartActivitiy(インテント)とするだけで簡単に
 遷移できてしまう。

+ 移動先のプログラミング
先ほど確認したとき本当に何も記述されていなかったはずなので、とりあえず何か表示してみる。

ソース↓
  1. public class SubActivity extends Activity implements OnClickListener{
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6.  
  7. //レイアウトを設定する
  8. LinearLayout layout = new LinearLayout(this);
  9. layout.setOrientation(LinearLayout.VERTICAL);
  10. //layoutをアクティビティのビューとしてセットする
  11. setContentView(layout);
  12.  
  13. //アクティビティに表示するテキスト
  14. TextView textView = new TextView(this);
  15. textView.setText("SubActivity jumped!");
  16. //layoutにtextViewを追加する
  17. layout.addView(textView);
  18.  
  19. Button button = new Button(this);
  20. button.setText("back");
  21. button.setOnClickListener(this);
  22. //layoutにbuttonを追加する
  23. layout.addView(button);
  24. }
  25.  
  26. @Override
  27. public void onClick(View v) {
  28. try{
  29. finish();
  30. }catch(Exception ex){
  31. Toast.makeText(SubActivity.this, "MainActivityへの画面遷移に失敗しました", Toast.LENGTH_LONG).show();
  32. }
  33. }
  34.  
  35. }
  36.  

+ 遷移先の解説
クリックしたら遷移先はfinish()によって終了される。
終了されると遷移元のActivityに帰ってくるようになっている。

そして今回の内容とは関係ないけど、LinearLayoutを用いることでレイアウトのxmlを
いじることなくプログラム内でレイアウトを完結させることも可能。これ結構重要。
最終更新:2013年09月03日 14:44