在一个视图中创建多个tabhost元素

时间:2012-02-01 21:05:18

标签: android android-tabhost

我正在尝试在单个视图中创建多个tabhost。在此示例中,我使用了来自iosched应​​用程序和“工作区”视图的代码示例,该视图允许用户向左/向右滑动以在视图之间滑动。

每个幻灯片视图都包含一个tabhost。

我遇到的问题是,当我填充第二个,第三个等tabhost时,所有内容都出现在第一个tabhost上,而不是正确的。

我有一个对象列表,列表中的每个对象都有一个单独的tabhost:

    Outer loop over each xxx to build a tabhost for each xxx

    // Setup views
    ctlr.mRootView = (ViewGroup) inflater.inflate(R.layout.controllers_list_content_tabbed, null);

    ctlr.scrollView = (ObservableScrollView) ctlr.mRootView.findViewById(R.id.controllers_scroll);
    ctlr.scrollView.setOnScrollListener(this);

    ctlr.mTabHost = (TabHost) ctlr.mRootView.findViewById(android.R.id.tabhost);
    ctlr.mTabWidget = (TabWidget) ctlr.mRootView.findViewById(android.R.id.tabs);
    ctlr.mTabHost.setup();
    ctlr.mTabRealContentView = ctlr.mRootView.findViewById(R.id.realtabcontent);
    int mTabReakContentViewId = ctlr.mTabRealContentView.getId();
    ctlr.mTabManager = new TabManager(this, ctlr.mTabHost, mTabReakContentViewId);
    .
    .
    . I loop several tabs like the snippet below and I expect each of these tabs on each tabhost
    .
    // Supply controller uri as an argument.
    Bundle args = new Bundle();
    args.putInt("controllerId", ctlr.mControllerId);

    String tagSpec = TAG_PROBES + "_" + ctlr.mControllerId.toString();
    ctlr.mTabManager.addTab(ctlr.mTabHost.newTabSpec(tagSpec)
                                            .setIndicator(buildIndicator(ctlr, R.string.db_maint_probes)),
                            DbMaintProbesFragment.class, 
                            args);

    .
    .
    .
    mWorkspace.addView(ctlr.mRootView);
    mCtlrs.add(ctlr);  <<-- this is the linked list of all the items added to the workspace

我认为问题在某种程度上与以下事实有关:每次TabManager在最后一步中都是新的时候,它总是使用相同的RealTabContent引用。

有什么想法?这让我发疯了。

虽然每个tabhost都是在各自的片段中构建的,但我可以看到它们都是指第一个RealTabContent ID。

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

什么是TabManager?我在Android开发文档中找不到它。

从我所看到的,你只创建一个TabHost和一个TabManager并为其添加标签。当然你想要不止一个?

我会使用ViewFlipper并为其添加许多线性布局。然后,我会将标签主机添加到每个线性布局中。这将创建多个“屏幕”,您可以在向左/向右滑动时将其连接起来,每个“屏幕”都有自己的一组标签。