【问题标题】:Tabs using Fragments on Android, but inside another Layout在 Android 上使用 Fragments 的选项卡,但在另一个布局中
【发布时间】:2011-11-01 14:35:09
【问题描述】:

我正在为主要活动创建具有表格布局的 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 中?重要的是要低于这个内容。提前谢谢...

【问题讨论】:

    标签: java android layout tabs android-fragments


    【解决方案1】:

    理想情况下,这将使用嵌套片段来完成,但 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 改变主意弃用它。

    【讨论】:

    • 所以,您的意思是,在顶层有一个扩展 ActivityGroup 的 TopLevelActivity,并且在 onCreate 方法中有您在上面编写的代码。如果我有两个名为 Act1 和 Act2 的活动,它们有自己的视图,我如何将它们放在一起?我还没明白你的意思,请你再写一些关于这个主题的示例代码吗?提前致谢。
    • 查看上面修改后的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多