理解Activity的setContentView

时间:2010-07-07 08:41:36

标签: android android-activity android-tabhost

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

然后一切都很完美。 感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

回答我自己的问题,我发现错误,当调用setContentView时,视图会附加到父级,这就是为什么它不会出现在tabhost中。要从其父级中删除视图,可以使用以下代码:

ViewGroup vg = (ViewGroup)(myView.getParent());
vg.removeView(myView);