Android - 为什么这告诉我“内容视图尚未创建”?

时间:2012-02-15 00:42:56

标签: android android-listview

这是一个填充数据库片段的列表视图:

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上?当片段打开时,程序强制关闭......

3 个答案:

答案 0 :(得分:56)

我通过将适配器和getListview移动到onActivityCreated(...)来解决它。

onCreateView只会膨胀并返回布局。

答案 1 :(得分:2)

Fragment通常应放在Activity内,而onCreateView()会将Fragment的布局提供给其容器Activity

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

  

片段通常用作活动用户界面的一部分   为活动贡献自己的布局。

因此,问题可能是由于您的容器setContentView()中缺少Activity而不是Fragment而造成的。

答案 2 :(得分:1)

我有同样的问题,但我的错是通过接口从后台任务中调用(不可见)片段。所以不可见的片段试图使用它的视图,这是不可用的...我用相同的解决方案修复它:接口函数检查片段isVisible()。 感谢您向我展示正确的方向......

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