9

タブレットアプリにアクティビティがあり、向きに応じて異なるフラグメントを表示したいと思います。これを行う最も簡単な方法は、2つの異なるレイアウトXMLファイルを定義することであると考えました。1つは横向き用、もう1つは縦向き用です。言い換えれば、私は次のような/layout/home.xmlを持っています:

<LinearLayout android:orientation="horizontal">
  <fragment class="com.foo.app.Frag1" android:id="frag1"/>
  <fragment class="com.foo.app.Frag2" android:id="frag2"/>
</LinearLayout>

そして/layout-port/home.xmlで:

<LinearLayout android:orientation="vertical">
  <fragment class="com.foo.app.Frag2" android:id="frag2"/>
  <fragment class="com.foo.app.Frag3" android:id="frag3"/>
</LinearLayout>

私がそれを実行するとき、私は横向きから始めて縦向きに行くことができます、そしてすべてが大丈夫です。ただし、縦向きから横向きに移行すると、リソースIDが「frag3」のandroid.content.res.Resources$NotFoundExceptionでアプリがクラッシュします。そうです、ランドスケープメイドに行くときにFrag3を探しています、そしてそのモードにはFrag3はありません。これはActivity.onCreateスタック中に発生するため、コードがアプリをクラッシュさせる前に発生します。

フラグメントはこのように機能するはずではありませんか?代わりにFragmentTransactionを使用する必要がありますか?

4

1 に答える 1

1

コードを見ずに言うのは難しいですが、Resources.NotFoundException は通常、アセット (R.layout.xx、R.drawable.xx など) を間違って検索しようとしたことを意味します。

そうは言っても、あなたのレイアウト XML を使用して小さなアプリを作成しようとしましたが、テストのために XML コードをコピーしたときに、ID として文字列をハードコーディングするようコンパイラーに怒鳴られました。android:id 属性の値を次のように切り替えてみてください。

Android:id="Android:id="@+id/frag1"

問題が解決する場合があります。

于 2011-03-10T21:25:16.083 に答える