同じタブ画面(TabWidget)内で、複数 Activity を切り替える為に、ActivityGroup を
使用する方法があるが、気をつけないとレイアウトで困ったことになる。
例として、、、
ActivityGroup で、切替え対象の Activity を表示させる コンテナのレイアウトを用意して、、
===== container.xml ======
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
ActivityGroup 継承を以下の用意して、
public class TabParentActivityGroup extends ActivityGroup{
private ViewGroup container;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.container);
container = (ViewGroup)findViewById(R.id.container);
// 初期表示
showChild1();
}
public void showChild1(){
container.removeAllViews();
Intent intent = new Intent(this, TabChild1Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window window = getLocalActivityManager().startActivity("child1Activity",intent);
container.addView(window.getDecorView());
}
public void showChild2(){
container.removeAllViews();
Intent intent = new Intent(this, TabChild2Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window window = getLocalActivityManager().startActivity("child2Activity",intent);
container.addView(window.getDecorView());
}
}
TabChild1Activity の中、ボタンクリックなどで、、
*1.showChild2();
を実行するなど。。。
これは、遷移として動くことは動くが、画面レイアウトが以下のようになってしまう。
半分くらい切れてしまう。
これは、TabHost のコンテンツは、FramLayout だから当然なのだが、
そこで、fill_parent になるように、コンテナなどを使わずに setContentView を使う。
public class TabParentActivityGroup extends ActivityGroup{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// 初期表示
showChild1();
}
public void showChild1(){
Intent intent = new Intent(this, TabChild1Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window window = getLocalActivityManager().startActivity("child1Activity",intent);
setContentView(window.getDecorView());
}
public void showChild2(){
Intent intent = new Intent(this, TabChild2Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window window = getLocalActivityManager().startActivity("child2Activity",intent);
setContentView(window.getDecorView());
}
}
*1:TabParentActivityGroup)getParent(