一、需求,在Tab的一页中根据其他页的设置切换ExpandableListActivity和ListView。
ListView:
ExpandableListActivity:
二、方案:Tab中使用ActivityGroup,用ActivityGroup控制ExpandableListActivity和ListView的切换。
这个是成功的代码,5步完成Activity显示。
@Override
protected void onResume() {
LinearLayout container = (LinearLayout) getWindow().findViewById(R.id.contacts_main_view);//1、得到ActivityGroup布局容器
container.removeAllViews(); //2、去掉所有view。
if (mpatterManagr.isPatter(Defines.MyContactsPatterType.PATTER_EXPAND)) {
Intent intent = new Intent(this, ContactsListExpandActivity.class);
Window w1 = getLocalActivityManager().startActivity(EXPAND_AC,
intent);
container.addView(w1.getDecorView(), LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);// (w1.getDecorView().getLayoutParams().);
} else {
Intent intent = new Intent(this, ContactsListIphoneActivity.class); //3、获得要去的Activity。
Window w1 = getLocalActivityManager().startActivity(IPHONE_AC, //4、通过LocalActivityManager前往,会返回一个window。
intent);
container.addView(w1.getDecorView()); //5、把window的view传给ActivityGroup布局容器。
}
super.onResume();
}
三、问题:
1、切换代码需要放到onResume方法里面。tab切到ActivityGroup,进的是onResume方法。
2、需要为ActivityGroup创建一个xml布局文件,空的LinearLayout 就行,记得加个id。这里需要用到。
3、ExpandableListActivity显示的时候,焦点出现问题,只能点字母那块。增加布局参数可以解决这个问题。
4、对象传递,用getParent()。