0

我有一个包含列表视图的布局文件,我想在片段的帮助下填充它。但它继续给我错误。布局文件:

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

我的片段活动:

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!
    }
}

}

我的列表片段:

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)

4

1 回答 1

0

findFragmentById(...)函数将片段(!)的 ID 作为参数。但你称它为ListView ( )R.id.list的。这是错误的,因为它不是片段。这是第一个问题。ID<ListView android:id="@+id/list" ...ListView

第二个问题是:

  FragmentTransaction ft = fm.beginTransaction();
       ft.add(R.id.list, new BasicFragment());

函数中的ft.add()第一个参数是要放置片段的容器的 ID。但是你使用R.id.listwhich 是你的ListView. 这是错误的,因为 ListView 不是可以直接放入片段的容器。

如果要将片段放入ListView项目中,您可以:

  1. 填充ListView自定义视图。
  2. 声明<fragment ...>为自定义视图布局 (XML)。或者在自定义视图布局中创建片段容器(例如 FrameLayout)并在运行时将片段放在那里(在 getView() 方法中)。
于 2012-10-04T10:54:53.477 回答