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を呼び出すコードは以下の通りです。
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
<activity android:name=".Sample1Activity" android:label="Sample1Activity" /> <activity android:name=".Sample2Activity" android:label="Sample2Activity" />