Honeycomb和TabHost规格

时间:2011-03-23 16:23:55

标签: android android-tabhost android-3.0-honeycomb

我对Honeycomb的向后兼容性有疑问。我有一个支持2.1或更高版本的应用程序,似乎主要用于Honeycomb,除非他们启动TabActivity。

特别是,当我向TabHost添加标签时,我得到以下异常

android.content.res.Resources $ NotFoundException:资源ID#0x0

当查看抛出此异常的代码时,我发现它是带有标签和图标的选项卡规范。在代码内部,LabelAndIconIndicatorStrategy尝试对布局文件R.layout.tab_indicator进行充气,该文件似乎不可用。

    TabHost.TabSpec spec; // Resusable TabSpec for each tab
    Intent intent; // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(_gameActivity, ScoreGameActivity.class);
    intent.putExtra(GameChangerConstants.STREAM_ID, _stream.pk().toString());

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = _gameTabHost.newTabSpec("score_game").setIndicator("Score", res.getDrawable(R.drawable.icon_field_gloss)).setContent(intent);
    _gameTabHost.addTab(spec);

是否有一种为蜂窝创建标签的新方法,我不知道?我已经倾倒了文档,但没有看到任何表明我所做的事情的问题。

我希望避免在此时使用片段,直到我们可以对UI小部件进行更全面的重构,并且我希望更好地理解这个问题。

1 个答案:

答案 0 :(得分:14)

我相信我找到了一个解决方案,但由于人们很好奇,这是我遇到这个问题时的堆栈跟踪:

05-17 13:09:53.462: ERROR/CustomExceptionHandler(500): Uncaught throwable in thread Thread[main,5,main]
    android.content.res.Resources$NotFoundException: Resource ID #0x0
    at android.content.res.Resources.getValue(Resources.java:1014)
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2039)
    at android.content.res.Resources.getLayout(Resources.java:853)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:389)
    at android.widget.TabHost$LabelAndIconIndicatorStrategy.createIndicatorView(TabHost.java:568)
    at android.widget.TabHost.addTab(TabHost.java:226)
    at com.myApp.ui.TabDialog.addTab(TabDialog.java:80)
    ...

在那一行,我的代码大致相当于闪闪发光的东西:

spec = myTabHost.newTabSpec("score_game").setIndicator("Score", res.getDrawable(R.drawable.icon_field_gloss)).setContent(intent);
myTabHost.addTab(spec);

请注意,myTabHost是TabHost,spec是TabSpec。

之前,我正在初始化myTabHost,如下所示:

//WRONG - This can CRASH your app starting at Android SDK 3.0
TabHost myTabHost = new TabHost(getContext()); 

要解决此问题,我开始通过执行以下操作初始化TabHost:

TabHost myTabHost = new TabHost(getContext(), null); 

这就解决了!我很想找到根本原因,但我还没有弄明白。