使用 SimpleCursorAdapter 基于 sqlite 查询更新列表视图

Posted

技术标签:

【中文标题】使用 SimpleCursorAdapter 基于 sqlite 查询更新列表视图【英文标题】:Updating listview based on sqlite query with SimpleCursorAdapter 【发布时间】:2016-01-16 14:52:20 【问题描述】:

我有一个列表视图,其中包含一个配置文件 imageview、两个文本视图和一个最喜欢的 imageview。 在我在列表视图上方提供的搜索框中,我想查询 sqlite DB 并使用 SimpleCursorAdapter 在我的列表视图中获取更新的结果。

以下是我的创建表语句,它显示了所有涉及的列。

public static String CREATE_TABLE_STMT="create table "
            +CONTACT_TABLE+" ("
            +ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"
            +NAME+" varchar(100) NOT NULL UNIQUE ,"
            +PHONE+" varchar(100) ,"
            +EMAIL+" varchar(100) ,"
            +JOBTITLE+" varchar(100) ,"
            +WEBPAGE+" varchar(100) ,"
            +PICTUREURL+" varchar(100) ,"
            +THUMBNAILURL+" varchar(100) ,"
            +PICTUREPATH+" varchar(100) ,"
            +THUMBNAILPATH+" varchar(100))";

我正在尝试运行以下查询来搜索“NAME”与我的搜索文本匹配的行。具体来说,我正在尝试检索名称列值以 search query 开头的行。

String searchQuery = "SELECT ID as _id," + AppConstants.NAME+","+AppConstants.JOBTITLE+","+AppConstants.THUMBNAILURL +  " from " + AppConstants.CONTACT_TABLE + " where " + AppConstants.NAME + " LIKE '" + query + "';";

搜索“al”应返回名称为“Alan”的完整行 搜索“tho”应返回名称为“Thomas”的完整行

运行查询后,我正在检查光标值并尝试更新我的列表视图

if (cursor != null) 
            Log.i(AppConstants.APPUILOG,"cursor not null");
            cursor.moveToFirst();
            String[] from = new String[] new String[] NAME,JOBTITLE,THUMBNAILURL;
            int[] to = new int[] R.id.textViewMain,R.id.textViewSub,R.id.contact_icon;
            SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.contact_list_item, cursor, from, to);
            mainListView.setAdapter(cursorAdapter);
        else 
            Log.i(AppConstants.APPUILOG,"cursor is null");
        

但是这段代码总是返回空白列表视图。

是否必须自定义 SimpleCursorAdapter 才能实现相同的功能? 我需要在查询中进行哪些修改? 如何创建自定义 SimpleCursorAdapter 并显示更新后的结果?

【问题讨论】:

参见FilterQueryPrivider 文档 【参考方案1】:

据我所知,您想在 ListView 中搜索。 我对吗 ?如果是,那么您需要更改方法,在 ListView 中搜索时无需与 DB 交互。您需要在 ListView 中实现过滤器。您可以查看this 链接以获得完整的解决方案。

【讨论】:

感谢@android Dev。我走错了方向。感谢您的链接和指导。 @Harry 当然,您在搜索数据时必须与数据库交互,您的数据存储在数据库中不是吗?那么如果不通过查询如何搜索它们呢?只需阅读 FilterQueryPrivider 并在搜索框中使用 adapter.getFilter().filter(constraint) 即可,请参阅 here 以获取示例代码

以上是关于使用 SimpleCursorAdapter 基于 sqlite 查询更新列表视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 SimpleCursorAdapter 从 Cursor 更改值

SimpleCursorAdapter使用代码

使用 EditText 过滤 SimpleCursorAdapter 支持的 ListView

在 SimpleCursorAdapter 上使用 notifyDataSetChanged 不起作用

带有 SimpleCursorAdapter 的 AutoCompleteTextView 用于加载联系人

ListView显示数据库的数据-SimpleCursorAdapter的使用