最近 博主在设计一个项目 ,通过activity 动态将 布局文件中的一块区域 动态的设定 为不同的Fragment ,现在面临的一种情况是 ,目前的Fragment中有一个button和一个ListView,要实现的效果是,点击Button时,系统会读取 数据库文件 ,从数据库中读取需要的 数据 在 这个Fragment中的ListView 上显示。
首先,数据库和各项信息都已经配置好 , 没有问题。
刚开始的操作时,通过查询语句 获得 Cursor,通过SimpleCursorAdapter 来实现填充,代码如下:
首先获得ListView
lv = getLayoutInflater().inflate(R.layout.ListView,null);然后通过 下面代码进行填充
adapter = new SimpleCursorAdapter(word_activity.this,R.layout.wordlist ,cursor_c,new String[]{"word","shiyi"},new int[]{R.id.word_t,R.id.shiyi_t},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); lv.setAdapter(adapter);这里需要注意一下 , 如果要使用 Curcor进行填充的话,需要你 数据库中表 要包含 _id的列,这是必须的!
还需要注意的是 在填充期间 不能关闭 curcor 否则会造成 数据填充失败!
然后运行的结果是:curcor中有文件 ,但是 ListView中没有显示!
后面 看 Android Monitor 中 ,发现系统提示 ListView 指针是空的 怎么会呢?
然后 尝试了一下 ,利用 FragmentManager来获得 控件 ,代码如下:
FragmentManager fm = getFragmentManager(); final ListView lv = (ListView)fm.findFragmentById(R.id.word_main). getView().findViewById(R.id.word_list);在进行测试 一切正常!!!!
分析:
Inflater.inflate()是用来获取 布局文件的 这很重要 ,但是这个函数也仅仅是用来获取布局文件的 不能用来获取控件 一直都没有注意到 !
获取控件 还是需要 通过 先获取 Fragment 然后逐步 获取 控件!