没有TabActivity,ActivityGroup或LocalActivityManager的TabHost

时间:2012-04-02 19:39:01

标签: android android-fragments android-tabhost tabwidget

我正在创建一个在主屏幕上有三个标签的应用。我将每个选项卡的内容设置为单独的活动。我使用活动而不是片段的原因是因为在其中一个标签中我需要能够拥有片段和嵌套片段。

起初,我正在扩展TabActivity这样做,但后来我意识到它已被弃用,所以我开始环顾四周。我发现有人建议在这里使用ActivityGroup,但是......也不推荐使用。

似乎StackExchange上的所有解决方案都解决了我遇到的问题,包含已弃用的功能。例如,Android: TabHost without TabActivityAndroid - Tabhost working in Activity class

使用TabHost并允许标签包含片段而不使用已弃用的功能的正确方法是什么?

以下是我目前所拥有的

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class HomeTabs extends ActivityGroup {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost host = (TabHost)findViewById(android.R.id.tabhost);
        LocalActivityManager mlam = new LocalActivityManager(this, false);
        mlam.dispatchCreate(savedInstanceState);
        host.setup(mlam);

        TabSpec spec = host.newTabSpec("Home");
        spec.setContent(new Intent(this, HomeActivity.class));
        spec.setIndicator("Home");
        host.addTab(spec);

        spec = host.newTabSpec("Browse");
        spec.setContent(new Intent(this, BrowseActivity.class));
        spec.setIndicator("Browse");
        host.addTab(spec);

        spec = host.newTabSpec("About");
        spec.setContent(new Intent(this, AboutActivity.class));
        spec.setIndicator("About");
        host.addTab(spec);
    }
}

1 个答案:

答案 0 :(得分:3)

  

使用TabHost并允许标签包含片段而不使用已弃用的功能的正确方法是什么?

将视图放置在标签中,无论是在布局中静态地显示为FrameLayoutTabHost的直接子项,还是通过setContent()的变体TabContentFactory动态显示}。这些观点可以通过AFAIK来管理片段(例如ViewPager),或者可能通过<fragment>元素直接对片段进行片段化。

或者,不要使用TabHost。使用操作栏中的选项卡,使用ActionBarSherlock实现向后兼容性。或者,使用ViewPager。或者,使用ViewFlipperTabWidget(尽管有文档,但它们似乎并未真正依赖TabHost)。或者,使用ViewFlipper和其他一些控制机制在“标签”之间切换。

或者,摆脱标签内容中的“片段”。