当适配器也有 setViewBinder 时,用 FilterQueryProvider 过滤 SimpleCursorAdapter 不起作用

问题描述

我有一个 SimpleCursorAdapter,它有一个 ViewBinder 用于图像色调和 FilterQueryProvider 用于搜索功能。在我添加 ViewBinder 之前搜索工作正常,但是当我添加 ViewBinder 时它不起作用。这是我搜索时遇到的错误

An exception occured during performFiltering()!
    java.lang.IllegalStateException: attempt to re-open an already-closed object: sqliteDatabase: /data/user/0/com.nima.note/databases/Note
        at android.database.sqlite.sqliteClosable.acquireReference(sqliteClosable.java:55)
        at android.database.sqlite.sqliteDatabase.queryWithFactory(sqliteDatabase.java:1234)
        at android.database.sqlite.sqliteDatabase.query(sqliteDatabase.java:1110)
        at android.database.sqlite.sqliteDatabase.query(sqliteDatabase.java:1278)
        at com.nima.note.AdapterProvider$2.runQuery(AdapterProvider.java:100)
        at android.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:432)
        at android.widget.CursorFilter.performFiltering(CursorFilter.java:49)
        at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)

我想知道它是否与ViewBinder有关。 setViewBinder 是否关闭 Cursor数据库?我应该如何将这两个功能一起使用?

编辑:如果这段代码有助于回答问题

simpleAdapter = new SimpleCursorAdapter(context,R.layout.note_list_item,listNotesCursor,new String[]{"DATE","TAG","TITLE","TAG"},new int[]{R.id.date_list_view,R.id.tag_list_item,R.id.title_list_view,R.id.list_note_tag_image},0);
        simpleAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
            @Override
            public boolean setViewValue(View view,Cursor cursor,int i) {
                if (view.getId() == R.id.list_note_tag_image){
                    ((ImageView) view).setColorFilter(getTagColor(cursor.getString(3),handler));
                    return true;
                }
                return false;
            }
        });
        simpleAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            @Override
            public Cursor runQuery(CharSequence charSequence) {
                if (charSequence == null || charSequence.length() == 0) {
                    return listNotesCursor;
                }//line below is line 100 which the error is pointing at
                listNotesCursor = readableListNotes.query("NOTES",new String[]{"_id","TEXT","DATE"},"TITLE LIKE ?",new String[]{charSequence.toString()},null,null); 
                return listNotesCursor;
            }
        });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)