0

アクティビティのレイアウト ファイル内にフラグメントを作成しました。例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <fragment android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:id="@+id/article_fragment"
        android:name="com.user.domain.ArticleFragment"/>
</LinearLayout>

ArticleFragment::onCreateView関数でビューをインフレートします。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...
    return inflater.inflate(R.layout.article_view, container, false);
}

ariticle_view レイアウト xml は次のようになります。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/article"
    android:textSize="18sp"
    android:padding="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</TextView>

ここに問題があります:R.id.article_fragment添付後にビューの id ( ) ではなく フラグメントの id ( ) を介してのみビューを見つけることができR.id.article、ビュー インスタンスの id もフラグメントの id に変更されたのはなぜですか。

奇妙な振る舞いを説明できる人はいますか?

フラグメント API のドキュメントには、次のような説明があります。

システムは、フラグメントによって返されたビューを <fragment> 要素の代わりに直接挿入します。

それがこの問題の理由ですか?

4

1 に答える 1

0

あなたFragmentの 子供 のViewsような ものを 見つけ なけれ ば なら ない .

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.article_view, container, false);
TextView yourText = v.findViewById(R.id.article);
return v;
}
于 2014-12-04T09:26:17.710 に答える