4

Honeycombの下位互換性について質問があります。2.1以降をサポートするアプリがあり、TabActivityを起動する場合を除いて、ほとんどHoneycombで動作するようです。

特に、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ウィジェットのより包括的な再構築ができるようになるまで、この時点でフラグメントを使用する必要はありません。この問題をよりよく理解したいと思います。

4

1 に答える 1

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)
    ...

その行には、sparky が見たものとほぼ同等のコードがあります。

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

myTabHostは TabHost であり、TabSpec であることに注意してくださいspec

以前は、次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); 

そしてそれはそれを修正しました!根本的な原因を見つけたいのですが、まだ解明できていません。

于 2011-05-24T01:26:20.700 に答える