2012-10-04 159 views
0

我有一個佈局文件,其中包含一個listview,我想填充一個片段的幫助。但它繼續給我錯誤。 佈局文件:從片段填充listview

<?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:addView(查看)不支持AdapterView

回答

0

findFragmentById(...) fu nction以片段(!)的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()方法中)。
+0

我已經試過這種方式,但不知何故,當我嘗試它,這次它的工作。感謝指針:) – Bohsen