通过Activity设置动态Fragment中的ListView(通过SimpleCursorAdapter适配)

  最近 博主在设计一个项目 ,通过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 然后逐步 获取 控件!

  

要在Activity加载Fragment设置ListView,可以按照以下步骤进行操作: 1. 在Activity的布局文件添加一个FrameLayout用来容纳Fragment。 2. 创建一个Fragment,并在Fragment的布局文件添加一个ListView。 3. 在Fragment的Java代码,获取ListView设置适配器。例如: ```java public class MyFragment extends Fragment { private ListView mListView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my, container, false); mListView = view.findViewById(R.id.list_view); // 设置ListView适配器 mListView.setAdapter(new MyAdapter()); return view; } } ``` 4. 在Activity,使用FragmentManager加载Fragment,并将Fragment添加到FrameLayout。例如: ```java public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); // 获取FrameLayout容器 FrameLayout container = findViewById(R.id.container); // 创建Fragment实例 MyFragment fragment = new MyFragment(); // 使用FragmentManager加载Fragment,并将Fragment添加到FrameLayout getSupportFragmentManager().beginTransaction() .add(container.getId(), fragment) .commit(); } } ``` 其,`R.layout.activity_my`是Activity的布局文件,包含了FrameLayout容器;`R.layout.fragment_my`是Fragment的布局文件,包含了ListView。在Fragment的`onCreateView`方法,通过`view.findViewById`方法获取ListView实例,并设置适配器。 在Activity,通过`getSupportFragmentManager`方法获取FragmentManager实例,调用`beginTransaction`方法开始一个事务,使用`add`方法添加Fragment到FrameLayout,并调用`commit`方法提交事务。这样就可以在Activity局部布局Fragment设置ListView了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值