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" />
One Comment