2012-02-15 95 views
19

這是一個片段從數據庫填充一個ListView:Android - 爲什麼這告訴我「內容視圖尚未創建」?

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

      LinearLayout Layout5 = (LinearLayout) inflater.inflate(R.layout.tab_frag5_layout, container, false); 

      Cursor allBands; 
      MyDatabase db; 

      Context ctx = (Context)TabFragment5.this.getActivity(); 


      db = new MyDatabase(ctx); 
      allBands = db.getBands(); 


      ListAdapter adapter = new SimpleCursorAdapter (ctx, 
        R.layout.listelement, 
        allBands, 
        new String[] {"BandName"}, 
        new int[] {R.id.text15}); 

      getListView().setAdapter(adapter); 

      return Layout5; 

     } 

這是爲什麼給我在logcat中的「尚未創建的內容視圖」?片段打開時程序部隊密切...

+0

不應該是第一個語句setContentView(..)? – kosa 2012-02-15 00:44:56

+0

我不這麼認爲,我正在處理碎片。 – tyb 2012-02-15 00:48:41

回答

54

我通過將適配器和getListview移動到onActivityCreated(...)來解決它。

onCreateView只是膨脹並返回佈局。

+0

當您調用setAdapter()時,ListFragment檢查以確保在佈局中定義了一個列表,並且由於onCreateView()沒有給出它的視圖片段,這是一個雞和雞蛋問題。 – 2012-09-04 13:37:12

+0

既要確保檢查setAdapter()和getListView()嗎?我確定getListView(),但不是關於setAdapter() – 2014-08-09 06:00:22

+3

爲什麼不onViewCreated。它似乎是最直觀的選擇。 – sudocoder 2015-01-24 00:50:43

2

一個Fragment平時應該把一個Activity內,而onCreateView()將貢獻的Fragment佈局,其容器Activity

http://developer.android.com/guide/topics/fundamentals/fragments.html

片段通常用作一個活動的用戶界面的一部分,並且有助於 其自身的佈局的活動引。

因此,該問題可能很可能受到的setContentView()缺少你的貨櫃Activity,而不是你的Fragment造成的。

+0

請閱讀以下問題的回答:http://stackoverflow.com/questions/9297151/android-why-is-this-happening-content-not-yet-created-error – tyb 2012-02-15 16:26:19

1

我有同樣的問題,但我的錯在於通過接口從後臺任務調用(不可見)片段。所以不可見的片段試圖使用它的視圖是不可用的...我用相同的解決方案修復它:接口函數檢查片段isVisible()。 謝謝你向我展示正確的方向...

public void updateListInterface(){ 
    if(this.isVisible()) { 
     this.initListAdapter(); 
     getLoaderManager().restartLoader(0, null, this); 
    } else { 
     Log.v(TAG, "view is not visible"); 
    } 
} 
相關問題