ActivityGroupをつかって複数Activityを表示する
|Androidでは通常、同時に表示できるActivityは1つだけです。ActivityGroupを使うと複数のActivityを同時に表示できます。サンプルプロジェクトはTechBoosterのこちら(SVNが必要です)からどうぞ。
縦画面と横画面での表示内容を変更する、2カラムの画面構成など柔軟なアプリケーションを作ることができます。またActivityGroupはTabActivityやListActivityと同様にActivityを継承したクラスです。Activityと同じように簡単に使えます。
サンプルのアプリケーションはmainとなるActivityのほかに、2つのアクティビティを表示しています。
Activityの構成
- ActivityGroup
- Sample1Activity( /res/layout/sample1.xml)
- Sample2Activity( /res/layout/sample2.xml)
サンプルコードは続きから
ActivityGroupで、複数のActivityを呼び出すコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class ActivityGroupActivity extends ActivityGroup { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); //Activityを呼び出す準備 LocalActivityManager am = getLocalActivityManager(); LinearLayout layout = (LinearLayout)findViewById(R.layout.activity_layout); //LocalActivityManager#startActivityはIntentを使う Intent intent = new Intent( this , Sample1Activity. class ); Window window = am.startActivity( "Sample1_UniqueString" , intent); //Viewの取得 View view = window.getDecorView(); layout.addView(view); /* 2つめのActivity */ Intent intent2 = new Intent( this , Sample2Activity. class ); Window window2 = am.startActivity( "Sample1_UniqueString" , intent2); View view2 = window2.getDecorView(); layout.addView(view2); } } |
LocalActivityManagerを利用して、LinearLayoutにActivityを追加していきます。Activityの呼び出しにはLocalActivityManager#startActivityを使います。startActivityの第1引数はユニークなStringで指定してください。startActivityで起動するActivityを管理するための文字列です(ActivityはsingleTop指定でマルチタスク化されていない可能性等、特定が必要なケースがある)。
- Window LocalActivityManager#startActivity( String id, Intent intent)
17行目では取得したWindowを使ってActivityのViewを取得します。Layoutに追加して処理は完了です。
AndroidManifest.xml
ActivityGroupで利用する場合でも、AndroidManifest.xmlにActivity要素を追加してください(追加を忘れるとエラー終了します)
AndroidManifest.xml
1 2 | <activity android:name= ".Sample1Activity" android:label= "Sample1Activity" /> <activity android:name= ".Sample2Activity" android:label= "Sample2Activity" /> |