68

Android デベロッパー ガイドのフラグメントに関するドキュメントを読みましたが、フラグメント タグ属性android:nameでインスタンス化するクラスを指定する場合と、 class:属性を使用する場合があることを確認しました。

<fragment
    android:name="com.example.news.ArticleReaderFragment"
    android:id="@+id/viewer"
    android:layout_weight="2"
    android:layout_width="0dp"
    android:layout_height="match_parent" />

<fragment
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
    android:id="@+id/titles" 
    android:layout_weight="1"
    android:layout_width="0px" 
    android:layout_height="match_parent" />

android:nameclass:は交換可能ですか? Eclipse でオートコンプリート機能を使用すると、どちらも同じドキュメントのヒントが表示されます (つまり、インスタンス化されるクラス名が属性によって提供されます)。FragmentLayout.javaファイルにあるTitlesFragmentのように、インスタンス化するクラスの名前が Java ファイル名とは異なる場合、2 番目のものを使用する必要があるのではないでしょうか? または、構文package.fileDOTjava$Classandroid:name属性でも使用できますか?

Android Java クラスの場合と同様に、XML タグと属性のドキュメントが必要です (これについては別の質問で尋ねました)。

4

3 に答える 3

45

Activity.onCreateView ソースが言うように:

String fname = attrs.getAttributeValue(null, "class");
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment);
if (fname == null) {
    fname = a.getString(com.android.internal.R.styleable.Fragment_name);
}

これは、プログラムが最初に「クラス」属性を調べることを意味しているようです。そして、失敗すると「名前」属性が見えます。したがって、より効率的であれば「クラス」を使用することが真実である限り。

于 2012-12-19T10:43:43.450 に答える
26

android:nameとclass:は互換性がありますか?

おそらく、はい。私は使用しただけで、それはGoogleの例のほとんどが使用しているようですが、いくつかのサンプルclassでそれらがどこで使用されているかはわかります。android:name残念ながら、の正式で完全なドキュメントはありません<fragment>

于 2012-04-15T15:40:55.760 に答える
0

申し訳ありませんが、すべての専門家がここにいます。私は間違っているかもしれませんが、私の知識によれば、fragmentManager クラスのgetFragmentByTag()メソッドを使用すると、フラグメントのandroid:name属性がフラグメントの検索に使用されます。また、android:class属性は、静的フラグメントに通常含まれるフラグメント クラスを見つけるために使用されます。

これが役立つことを願っています..ありがとう

于 2013-07-04T09:20:47.417 に答える