我有一个包含listview的布局文件,我想在Fragment的帮助下填写。但它继续给我错误。 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" >
</ListView>
<TableLayout
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:stretchColumns="1" >
<Button
android:id="@+id/create_patient_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/create_patient_button" />
</TableLayout>
</RelativeLayout>
我的fragmentActivity:
public class BasicFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_patient_view);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.list);
if (fragment == null) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.list, new BasicFragment());
ft.commit(); // Make sure you call commit or your Fragment will not be added.
// This is very common mistake when working with Fragments!
}
}
}
我的ListFragment:
public class BasicFragment extends ListFragment {
private PatientAdapter pAdapter;
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
pAdapter = new PatientAdapter(getActivity(), GFRApplication.dPatients);
setListAdapter(pAdapter);
}
}
错误: java.lang.UnsupportedOperationException:AdapterView不支持addView(View)
答案 0 :(得分:0)
findFragmentById(...)
函数将片段(!)的ID作为参数。但是您使用R.id.list
来调用它,它是ListView(ID
)的<ListView android:id="@+id/list" ...
。这是错误的,因为ListView
不是片段。这是第一个问题。
第二个问题是:
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.list, new BasicFragment());
ft.add()
函数中的第一个参数是您要在其中放置片段的容器的ID。但您使用R.id.list
,即ListView
的ID。这是错误的,因为ListView不是可以直接放置片段的容器。
如果您想将片段放入ListView
项目,您可以:
ListView
。 <fragment ...>
声明为自定义视图布局(XML)。或者在自定义视图布局(例如FrameLayout)中创建片段容器,并在运行时放置片段(在getView()方法中)。