2012-02-15 96 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"); 
    } 
} 
相关问题