选项卡在Android上使用Fragments,但在另一个Layout中

时间:2011-11-01 14:35:09

标签: java android layout tabs android-fragments

我正在创建具有主要活动的表格布局的Android应用程序,并且该部分完美运行...现在,我们的想法是在现有组件下添加应用程序的另一部分,但现在我必须放置一个那里有标签布局。好吧,当我尝试运行时,该部分也能完美运行。但是我需要做些什么才能将这两者混合在一起,使得这两者在同一个屏幕上显示在另一个之下。

我的主要代码是:

package my.android;

import android.os.Bundle;

public class MyActivity extends FragmentActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

我为所有选项卡提供了不同的布局文件,我有我在本教程后创建的TabsActivity类: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

那么如何将一些TabsActivity ta对象添加到MyActivity?重要的是要低于这个内容。提前做出来......

1 个答案:

答案 0 :(得分:0)

理想情况下,这可以使用嵌套片段完成,但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仍然有用,并希望Gooogle改变主意弃用它。