网页里面能够嵌套网页,那Android的Activity能不能嵌套呢?答案是肯定。Android给我们提供了ActivityGroup和TabActivity,当我们至需要嵌套一个Activity或者不方便继承ActivityGroupF的时候,我们可以参考ActivityGroup的实现,比较关键的是LocalActivityManager。
最外层Activity
public class ViewActivity extends Activity{
protected LocalActivityManager mLocalActivityManager;
private FrameLayout mBoday;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_layout);
mLocalActivityManager = new LocalActivityManager(this, true);
Bundle states = savedInstanceState != null? (Bundle) savedInstanceState.getBundle(STATES_KEY) : null;
mLocalActivityManager.dispatchCreate(states);
Intent intent = new Intent();
intent.setAction("android.settings.SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
View v = mLocalActivityManager.startActivity("one", intent).getDecorView();
mBoday.removeAllViews();
mBoday.addView(v);
}
}
LocalActivityManager.startActivity()需要传入里程Activity信息,就跟Activity.startActivity()打开新的Activity的Intent参数一样,不同的是LocalActivityManager.startActivity()把传入的Activity信息作为嵌套Activity打开。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/frame"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
</LinearLayout>
外层Activity布局文件可以随意布置,但记得包涵里层Activty的布局标签,就像View是不能正常打开的里层Activity的。
外层Activity布局文件除了FrameLayout还可以使用LinearLayout作为显示里层Activity的视图。
但是里层Activity如果是ListActivity或者关于List相关属性的都不能正常显示。
目前猜测是因为ListActivity一类没有更新显示。