2011-12-07 15 views
0

ハンドヘルドのlayout.xmlとタブレットlayout.xmlを持つアプリがあります。フラグメントは、このように宣言されてlayout.xml内部:物事をシンプルに保つのと同じのためにXMLレイアウトのView要素のID文字列を再利用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:paddingTop="2dp" 
       android:paddingBottom="2dp"> 

<fragment class="com.example.MyFrag" 
      android:id="@+id/myFrag" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
</LinearLayout> 

、のは、このlayout.xmlは、解像度/レイアウトおよび解像度/レイアウト-大で同一であることとしましょう。私の主な活動で

、私はこのようなこのフラグメント参照:

final myFrag = (MyFrag) getSupportFragmentManager().findFragmentById(R.id.myFrag); 

をこれはタブレットのため正常に動作しますが、私はハンドヘルド上で実行しようとすると、myFragはnullです。周りをちょっと遊んだ後、ハンドヘルドのlayout.xmlの名前をmyFrag2に変更して代わりにその名前を検索すると、それが動作することがわかりました。どのような私を混乱することはAndroidのドキュメントによると、私はこのIDを再利用することができるはずです。

http://developer.android.com/guide/topics/ui/declaring-layout.html#id

私が何か間違ったことをやっていますか?私は本当にmyFragがnullであるかどうかをテストするためのコードを書く必要はなく、代わりにハンドヘルド名をロードしようとします...

答えて

0

これは疑問ではありません。私は正確に理由を言うことができませんでしたが、Rは適切に再生されていないようです。私はそれを拭き取り、それを再生して、すべてが世界とうまくいったので、何も特別なことはありません。

0

res/layout-largeを使用するかどうか分かります。レイアウトのデフォルトのディレクトリres/layoutを使用しないでください。したがって、画面サイズを使用する場合は、考慮するすべて(ほとんど)を使用する必要があります。したがって、ハンドヘルドのための小型で標準的な実装が必要になります。 画面サイズに関するドキュメントを読むことができますhere

+0

ドキュメントでこのルールの明示的な言及が見つかりませんでした。私が前提にしているのは、与えられたサイズに対して明示的なリソースを提供しなかった場合、res/layoutのデフォルトになります。私は上の質問を説明するために単純な例を使用しましたが、重複しているフラグメントIDを持っていない他のリソースがいくつかあります。 – Nick

関連する問題