这是一个填充数据库片段的列表视图:
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 :(得分: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");
}
}