FindviewById在使用“+ id”时返回null,但在我们使用Android:id时有效

时间:2017-03-28 16:41:27

标签: android android-layout android-fragments

我正在为片段创建一个示例应用程序。 我创建了一个片段并从中渲染视图。 但是,当我在布局中使用android:id="@+id/text2"时尝试渲染视图时,应用程序崩溃。

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<RelativeLayout  
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<TextView android:id="@+id/text2"
    style="?android:textAppearanceLarge"
    android:textStyle="bold"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below ="@id/text2"
    android:inputType="textPersonName"
    android:text="FIR Number"
    android:ems="10"
    android:layout_centerHorizontal="true"
    android:id="@+id/editText"
    tools:layout_marginTop="10dp"
    style="@android:style/Widget.EditText"
    android:textAlignment="center" />


</RelativeLayout>

</ScrollView>

但是当我使用android:id="@android:id/text2"

时效果很好
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView android:id="@android:id/text2"
    style="?android:textAppearanceLarge"
    android:textStyle="bold"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below ="@android:id/text2"
    android:inputType="textPersonName"
    android:text="FIR Number"
    android:ems="10"
    android:layout_centerHorizontal="true"
    android:id="@+id/editText"
    tools:layout_marginTop="10dp"
    style="@android:style/Widget.EditText"
    android:textAlignment="center" />

</RelativeLayout>

</ScrollView>

两种情况下片段视图中的代码都保持不变。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout containing a title and body text.
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_accident_details_step1, container, false);

    // Set the title view to show the page number.
    ((TextView) rootView.findViewById(android.R.id.text2)).setText(getString(R.string.title_template_step, mPageNumber + 1));
    return rootView;
}

为什么它在一个案例中有效,为什么不在另一个案例中呢?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您需要使用R.id.text2指向R文件中生成的ID 使用@+id/,阅读更多Syntax docs,并阅读有关Accessing Platform Resources

的内容

所以使用

 ((TextView) rootView.findViewById(R.id.text2)).setText(getString(R.string.title_template_step, mPageNumber + 1));
 //                                ^^^^^^^^^^

答案 1 :(得分:0)

你在片段中使用了android id。

((TextView) rootView.findViewById(android.R.id.text2)).setText(getString(R.string.title_template_step, mPageNumber + 1));

更改为

((TextView) rootView.findViewById(R.id.text2)).setText(getString(R.string.title_template_step, mPageNumber + 1));