在使用SimpleCursorAdapter、Cursor时,当listView.setAdapter(adapter)后,ListView没有显示的问题

本文探讨了在使用SimpleCursorAdapter与Cursor填充ListView时遇到的问题,即设置adapter后ListView未显示数据。问题源于在调用listView.setAdapter(adapter)之后立即关闭cursor,导致ListView无法完成数据加载。解决方案是延迟关闭cursor,避免ListView加载数据过程被中断。在Android API22(5.1.1)环境下,注意到startManagingCursor()已被弃用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来的代码是这样的:

sqLiteDatabase=dbHelper.getReadableDatabase();
String sql="select id as _id,name from searchSugTab where name like '%"+tempName+"%' order by id desc";
Cursor cursor=sqLiteDatabase.rawQuery(sql,null);

Log.d("TAG","Search:Cursor");
SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.search_suggection_layout,cursor,
        new String[]{"name"},new int[]{R.id.suggectionTxt}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
mSearchSuggestion.setAdapter(adapter);
cursor.close();
 sqLiteDatabase.close();

运行时,ListView没有显示数据。

后来在(https://bbs.youkuaiyun.com/topics/370142897)找解决的办法。


如果在mSeachSuggection.setAdapter(Adapter)之后直接cursor.close(),ListView就不能加载数据。据网上的资料,应该是ListView没有加载完毕就关闭了cursor,导致数据未能加载完成。

所以,去掉


cursor.close();

然后使用

startManagingCursor(cursor);

来管理cursor的生命周期。

不过,有一个小问题是,我使用的Android版本是5.1.1,API22,startManagingCursor()已经被弃用。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值