理想情况下,这将使用嵌套片段来完成,但 Android 还不支持。这留下了已弃用的 ActivityGroup 类。您需要一个扩展 ActivityGroup 并启动这两个活动的顶级活动。
您可以通过以下方式启动活动并获得他们的意见:
final Window w = getLocalActivityManager().startActivity(myTag, myIntent);
final View wd = w != null ? w.getDecorView() : null;
if ( null != wd ) {
wd.setVisibility(View.VISIBLE);
wd.setFocusableInTouchMode(true);
}
// TODO: Attach wd to a ViewGroup.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:下面是一个更完整的解决方案。
这是顶级活动的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
</LinearLayout>
这是顶级类:
public class EmbeddedActivityParent extends ActivityGroup {
private LinearLayout mRootLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mRootLayout = (LinearLayout) findViewById(R.id.root_layout);
// Add embedded status activity.
embedActivity("StatusColumn", new Intent(this, StatusActivity.class));
// Add embedded work activity.
embedActivity("WorkArea", new Intent(this, MainActivity.class));
}
private void embedActivity(String myTag, Intent launchIntent) {
final Window w = getLocalActivityManager().startActivity(myTag, launchIntent);
final View wd = w != null ? w.getDecorView() : null;
if ( null != wd ) {
wd.setVisibility(View.VISIBLE);
wd.setFocusableInTouchMode(true);
mRootLayout.addView(wd);
}
}
}
您可以根据需要添加任意数量的嵌入式活动。您甚至可以嵌套嵌入式活动,但请注意性能可能会成为一个因素。我们使用它来支持动态状态列。
就我个人而言,我认为 ActivityGroup 仍有用处,并希望 Google 改变主意弃用它。