web-dev-qa-db-ja.com

アクティビティレイアウト:フラグメントクラス:vs Android:name属性

Android Developer Guideの Fragments に関するドキュメントを読みましたが、Fragmentタグ属性でインスタンス化するクラスを指定することもあります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でオートコンプリート機能を使用すると、両方に同じドキュメントヒントが表示されます(つまり、属性はインスタンス化されるクラス名を提供します)。インスタンス化されるクラスの名前がJavaファイル名、TitlesFragmentFragmentLayout.Javaファイルにありますか?または、構文package.fileDOTjava $を使用できますかClassAndroid:name属性を使用していますか?

Android Java Classes(別の question )。

63
Gianni Costanzi

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);
}

これは、プログラムが最初に「クラス」属性に見えることを意味するようです。そして、失敗すると「名前」属性に見えます。そのため、より効率的な場合は「クラス」を使用することが事実です。

42
far.be

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

これが役立つことを願っています。

0
AndroUser