4

我需要以编程方式“按需”创建所有 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);

然后一切正常。任何帮助表示赞赏,谢谢!

4

1 回答 1

4

回答我自己的问题,我发现出了什么问题,什么时候setContentView被调用,然后视图附加到父级,这就是它没有出现在 tabhost 中的原因。要从其父视图中删除视图,可以使用以下代码:

ViewGroup vg = (ViewGroup)(myView.getParent());
vg.removeView(myView);
于 2010-07-07T13:54:51.850 回答