如何将视图设置为TabSpec的内容?

时间:2014-01-29 09:41:39

标签: android android-tabhost

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TabHost tabHost = new TabHost(this);
    tabHost.setId(2);
    TabWidget tabWidget = new TabWidget(this);
    tabWidget.setId(android.R.id.tabs);
    tabHost.addView(tabWidget, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

    FrameLayout tabcontentFrame = new FrameLayout(this);
    tabcontentFrame.setId(android.R.id.tabcontent);

    tabHost.addView(tabcontentFrame, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);


    tabHost.setup();

    LinearLayout lay = new LinearLayout(this);
    lay.setId(1);

...

    TabSpec spec = tabHost.newTabSpec(" ");

    spec.setContent(lay.getId()); 
    spec.setIndicator(" ");
    tabHost.addTab(spec);

    //mGame.addView(lay);
    setContentView(tabHost);
}

我想将一个视图(LinearLayout)添加到TabSpec,但我遇到了错误: spec.setContent(lay.getId()); 错误:Could not create tab content because could not find view with id 1

我不想使用任何xml。添加到TabSpec

时如何使此视图可见

/// 修改

其实我发现了一个问题。 LinearLayout lay应首先添加到tabcontentFrame,但仍然无法正常工作,我接下来RunTimeException,原因为Resources$NotFoundException,邮件为Unable to start activity ComponentInfo{com.example.konsolatrx/konsolatrx.TrxConsole}: android.content.res.Resources$NotFoundException: Resource ID #0x0

错误在行tabHost.addTab(spec);

///

好的,我找到了答案。

问题在于:

TabHost tabHost = new TabHost(this);

应该是:

TabHost tabHost = new TabHost(this, null);

必须指定属性集,但我不知道为什么。也许有人可以解释。 NKN代码很好,但不能解决这个问题,只是其他方式来实现我想要的。

1 个答案:

答案 0 :(得分:1)

我使用这样的东西:

// Being th the TabHost
final TabSpec setContent = th.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory() {
  public View createTabContent(String tag) {
    final View ll_view = LayoutInflater.from(globvars.getContext()).inflate(R.layout.tabs_content, null);
    final TextView view = (TextView) ll_view.findViewById(R.id.tabsContent);

    // do all the stuff you need to do to your view

    return ll_view;
  }
});


th.addTab(setContent);