我在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中的所有内容。
代码工作得很好,视图中各种对象上的事件都很好......只是在视图中它们都混杂在一起......
关于造成这种情况的原因以及如何纠正它的任何想法?
提前致谢。
吉姆
答案 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
宾果:工作
感谢您的帮助!