带有自定义 ListView 的片段不断抛出错误
Fragment with custom ListView keeps throwing error inflating
我有一个 ListView,我正试图将其转换为 MainActivity 中的片段。这曾经在上周工作,但显然我做了一些改变,现在只是让它不断弹出这个错误:
android.view.InflateException: Binary XML file line #29: Error inflating class fragment
通过调试发现问题出在ListView的创建行:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// (more code)
ListView listView = (ListView) getView().findViewById(
R.id.records_listview);
// (more code)
return inflater.inflate(R.layout.fragment_list, container, false);
}
xml 文件 records_listview 是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<ListView
android:id="@+id/records_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/records_btn_add"
android:layout_marginTop="20dp" />
</RelativeLayout>
我完全惊呆了,因为这曾经有效。如果将 ListView 放在 Activity 中,它会正常运行。此视图上也有按钮,这就是我使用 Fragment 而不是 ListFragment 的原因。
getView()
方法将在 onCreateView()
中 return 为 null,因为 View
你 return 从该方法中设置为 Fragment
的 View
。更改方法如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_list, container, false);
...
ListView listView = (ListView) view.findViewById(R.id.records_listview);
...
return view;
}
我有一个 ListView,我正试图将其转换为 MainActivity 中的片段。这曾经在上周工作,但显然我做了一些改变,现在只是让它不断弹出这个错误:
android.view.InflateException: Binary XML file line #29: Error inflating class fragment
通过调试发现问题出在ListView的创建行:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// (more code)
ListView listView = (ListView) getView().findViewById(
R.id.records_listview);
// (more code)
return inflater.inflate(R.layout.fragment_list, container, false);
}
xml 文件 records_listview 是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<ListView
android:id="@+id/records_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/records_btn_add"
android:layout_marginTop="20dp" />
</RelativeLayout>
我完全惊呆了,因为这曾经有效。如果将 ListView 放在 Activity 中,它会正常运行。此视图上也有按钮,这就是我使用 Fragment 而不是 ListFragment 的原因。
getView()
方法将在 onCreateView()
中 return 为 null,因为 View
你 return 从该方法中设置为 Fragment
的 View
。更改方法如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_list, container, false);
...
ListView listView = (ListView) view.findViewById(R.id.records_listview);
...
return view;
}