从片段填写列表视图

时间:2012-10-04 09:36:13

标签: android listview

我有一个包含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)

1 个答案:

答案 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项目,您可以:

  1. 使用自定义视图填充ListView
  2. <fragment ...>声明为自定义视图布局(XML)。或者在自定义视图布局(例如FrameLayout)中创建片段容器,并在运行时放置片段(在getView()方法中)。