我需要以编程方式“按需”创建所有UI,这意味着我不能使用任何XML。这是我所做的伪代码:
View v = new MyView();
activity.setContentView(v);
tabHost = new TabHost();
....
tabHost.setup();
TabSpec tabSpec = _tabHost.newTabSpec(page);
tabSpec.setIndicator(title);
tabSpec.setContent((TabContentFactory) this);
activity.setContentView(tabHost);
所以当调用TabContentFactory时,我返回视图,该视图是当前活动的内容视图。基本上我所做的是获取当前视图并将其包装在tabhost中。
一半工作,当我这样做时,我能够看到标签栏,但只能看到它下方的黑色视图,如果我点击其他标签,然后点击返回然后我可以看到视图,一切都按预期工作。
现在为什么我认为它与setContentView
有关,因为当我这样做时:
View v = new MyView();
// activity.setContentView(v); // we don't use it as current content view
tabHost = new TabHost();
....
tabHost.setup();
TabSpec tabSpec = _tabHost.newTabSpec(page);
tabSpec.setIndicator(title);
tabSpec.setContent((TabContentFactory) this);
然后一切都很完美。 感谢任何帮助,谢谢!
答案 0 :(得分:4)
回答我自己的问题,我发现错误,当调用setContentView
时,视图会附加到父级,这就是为什么它不会出现在tabhost中。要从其父级中删除视图,可以使用以下代码:
ViewGroup vg = (ViewGroup)(myView.getParent());
vg.removeView(myView);