膨胀的视图的ID将被附加后的片段ID替换?

时间:2014-12-04 09:17:15

标签: android fragment getview

我在活动的布局文件中创建了一个片段。例如:

<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 layout 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>

问题在这里: 为什么我只能通过片段的ID(R.id.article_fragment)找到视图,而不是在附加后查看其ID(R.id.article),并且视图实例的ID也更改为片段& #39; s id。

有人可以帮忙解释这种奇怪的行为吗?

片段api的文档有这样的描述:

The system inserts the View returned by the fragment directly in place of the <fragment> element.

这是问题的原因吗?

1 个答案:

答案 0 :(得分: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;
}