我正在尝试在单个视图中创建多个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。
感谢您提供任何帮助!
答案 0 :(得分:0)
什么是TabManager?我在Android开发文档中找不到它。
从我所看到的,你只创建一个TabHost和一个TabManager并为其添加标签。当然你想要不止一个?
我会使用ViewFlipper并为其添加许多线性布局。然后,我会将标签主机添加到每个线性布局中。这将创建多个“屏幕”,您可以在向左/向右滑动时将其连接起来,每个“屏幕”都有自己的一组标签。