Tab初始化的Android问题

时间:2010-07-02 11:00:52

标签: android tabs

我在android上有一个标签视图有问题。

我使用4个xml布局文件(每个是RelativeLayout)作为标签视图中标签的内容。

main.xml包含:TabHost(@android:id / tabhost),其中包含一个LinearWayout,其中包含一个TabWidget(@ anroid:id / tabs)和一个FrameLayout(@android:id / tabcontent)

如果我在main.xml中一个接一个地嵌入多个...一切正常......(除了我的main.xml是不可维护的,这是我想通过将文件拆分成一个简单的main.xml来解决的问题它定义了选项卡和内容框架,然后将视图推送到此...)。

我必须膨胀并将4个RelativeLayout xml文件插入选项卡内容的代码如下:

mTabHost = getTabHost();

View wv = null;
wv = LayoutInflater.from(this).inflate(R.layout.user_tab, mTabHost.getTabContentView(), true);
mTabHost.addTab(mTabHost.newTabSpec("User").setIndicator("User").setContent(wv.getId()));

wv = LayoutInflater.from(this).inflate(R.layout.track_tab, mTabHost.getTabContentView(), true);
mTabHost.addTab(mTabHost.newTabSpec("Track").setIndicator("Track").setContent(wv.getId()));

wv = LayoutInflater.from(this).inflate(R.layout.chart_tab, mTabHost.getTabContentView(), true);
mTabHost.addTab(mTabHost.newTabSpec("Chart").setIndicator("Chart").setContent(wv.getId()));

//等等多个标签页。

当我运行它时,第一个选项卡(User)为空,其余选项卡包含所有视图中的所有内容...因此tab2具有tab1-4中的内容,tab3具有tab1-4和tab4中的内容有来自tab1-4的内容...返回到tab1,它现在具有tab1-4中的所有内容。

代码工作得很好,视图中各种对象上的事件都很好......只是在视图中它们都混杂在一起......

关于造成这种情况的原因以及如何纠正它的任何想法?

提前致谢。

吉姆

2 个答案:

答案 0 :(得分:0)

  

关于导致此问题的原因的任何想法   如何纠正?

首先,替换:

setContent(wv.getId())

使用:

setContent(wv)

其次,替换:

LayoutInflater.from(this).inflate(R.layout.user_tab, mTabHost.getTabContentView(), true);

使用:

getLayoutInflater().inflate(R.layout.user_tab, mTabHost.getTabContentView(), false);

第三个参数中有false的关键。

答案 1 :(得分:0)

好的......弄明白为什么原来的方法不起作用......并修复它......也是@CommonsWare的一个很好的解决方案(谢谢!)

原始代码的解决方案原来是这样的:

wv = getLayoutInflater().inflate(R.layout.user_tab, mTabHost.getTabContentView(), false);
mTabHost.getTabContentView().addView(wv);
mTabHost.addTab(mTabHost.newTabSpec("User").setIndicator("User").setContent(wv.getId()));

关键点似乎是需要将膨胀的视图添加到选项卡内容视图中,但是,传递给setContent的id必须是我刚刚膨胀的新选项卡视图。

所以,如果我用true调用inflate,它会将add作为子视图,但返回父视图(即tabContent框架)...如果这是我传递给setContent的id,它会放置所有对象在屏幕上的那个视图中...我原来的问题。

所以,但是使用false调用会创建视图,但会跳过添加到父级,但重要的是,它会返回新视图。所以,如果我将这个tabContentView添加到框架中:

mTabHost.getTabContentView().addView(wv);

然后在setContent中,将id设置为新视图的id,c

宾果:工作

感谢您的帮助!