Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为搜索建议实现自己的Android CursorAdapter-未知异常_Java_Android_Sqlite_Searchview_Android Cursoradapter - Fatal编程技术网

Java 为搜索建议实现自己的Android CursorAdapter-未知异常

Java 为搜索建议实现自己的Android CursorAdapter-未知异常,java,android,sqlite,searchview,android-cursoradapter,Java,Android,Sqlite,Searchview,Android Cursoradapter,我已经实现了自己的游标适配器来手动处理建议,这样我就可以摆脱androiddocs提出的过度杀戮方法。 基本上,我所做的是在actionbar搜索视图膨胀后将其设置为setOnQueryTextListener。每次用户输入新的搜索文本时,我都会查询一个Sqlite db,它返回一个游标。最后,我使用检索到的游标创建自己的游标适配器,并使用setSuggestionsAdapter方法将其设置为searchview。 这里的问题是,根据每次配置更改时更新游标的方式,我会得到许多未知的异常。稍后我

我已经实现了自己的游标适配器来手动处理建议,这样我就可以摆脱androiddocs提出的过度杀戮方法。 基本上,我所做的是在actionbar搜索视图膨胀后将其设置为setOnQueryTextListener。每次用户输入新的搜索文本时,我都会查询一个Sqlite db,它返回一个游标。最后,我使用检索到的游标创建自己的游标适配器,并使用setSuggestionsAdapter方法将其设置为searchview。 这里的问题是,根据每次配置更改时更新游标的方式,我会得到许多未知的异常。稍后我将对其进行示例,首先是一些代码:

************************我自己的游标适配器类************************

        // Associate searchView listeners
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));

            return true;
        }
    });
        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
         /*   if (newText !="")
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));*/

            if (searchView.getSuggestionsAdapter() == null) {
                searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));
            } else {
                searchView.getSuggestionsAdapter().changeCursor(cursor);
            }

            return true;
        }
03-10 15:58:46.762    3767-3767/com.nikkis.vallabus  W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:46.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.612    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:58:48.622    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:58:48.632    3767-4304/com.nikkis.vallabus W/Filter﹕ An exception occured during performFiltering()!
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT stop.stopID AS _id, stop.address, stop_line.line FROM stop_line, stop WHERE stop.stopID = stop_line.stop AND stop.address LIKE '%%';
        at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:58)
        at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
        at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
        at android.widget.CursorFilter.performFiltering(CursorFilter.java:53)
        at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:213)
        at android.os.HandlerThread.run(HandlerThread.java:60)
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.652    3767-4304/com.nikkis.vallabus E/CursorWindow﹕ Failed to read row 0, column 0 from a CursorWindow which has 1 rows, 0 columns.
03-10 15:58:48.702    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.832    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
公共类BusStopCursorAdapter扩展了CursorAdapter{

public BusStopCursorAdapter(Context context, Cursor cursor) {
    super(context, cursor, false);

}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    //set address
    ((TextView)view.findViewById(R.id.address)).setText(cursor.getString(1));
    //set line
    ((TextView)view.findViewById(R.id.line)).setText(cursor.getString(2));

}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view = inflater.inflate(R.layout.suggestions_layout, parent, false);

    //set address
    ((TextView)view.findViewById(R.id.address)).setText(cursor.getString(1));
    //set line
    ((TextView)view.findViewById(R.id.line)).setText(cursor.getString(2));


    return view;

}
}
***********************添加到searchView的侦听器*******************

        // Associate searchView listeners
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));

            return true;
        }
    });
        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
         /*   if (newText !="")
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));*/

            if (searchView.getSuggestionsAdapter() == null) {
                searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));
            } else {
                searchView.getSuggestionsAdapter().changeCursor(cursor);
            }

            return true;
        }
03-10 15:58:46.762    3767-3767/com.nikkis.vallabus  W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:46.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.612    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:58:48.622    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:58:48.632    3767-4304/com.nikkis.vallabus W/Filter﹕ An exception occured during performFiltering()!
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT stop.stopID AS _id, stop.address, stop_line.line FROM stop_line, stop WHERE stop.stopID = stop_line.stop AND stop.address LIKE '%%';
        at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:58)
        at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
        at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
        at android.widget.CursorFilter.performFiltering(CursorFilter.java:53)
        at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:213)
        at android.os.HandlerThread.run(HandlerThread.java:60)
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.652    3767-4304/com.nikkis.vallabus E/CursorWindow﹕ Failed to read row 0, column 0 from a CursorWindow which has 1 rows, 0 columns.
03-10 15:58:48.702    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.832    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
在这种情况下,我更新游标的方法是添加一个全新的适配器。起初一切正常,但当配置发生更改时,我会看到以下日志:

03-10 15:20:11.762    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING: ad
03-10 15:20:13.012    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING: ado
03-10 15:20:13.992    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:20:15.602    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:20:15.602    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:20:15.662    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:20:15.672    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:20:15.722    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:20:15.812    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:20:15.882    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:20:18.402    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:20:18.402    1927-1927/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:20:18.492    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:20:18.492    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:20:18.522    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:20:18.552    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:20:18.592    1927-1927/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
应用程序似乎工作正常。唯一无法解释的问题(可能与这些异常有关)是,在配置更改后,有时会出现建议,有时则不会。就像它无法执行查询或其他操作一样

例如,如果我使用这个替代的侦听器实现,它只更新游标(因为这应该是最干净的方式),而不是重新创建整个适配器,那么事情会变得更糟:我得到未知的SQL错误(当SQL查询运行时不应该出现),某种游标列访问错误(或者在显示建议时不应该出现)应用程序最终崩溃

*************************替代听众**********************************

        // Associate searchView listeners
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));

            return true;
        }
    });
        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
         /*   if (newText !="")
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));*/

            if (searchView.getSuggestionsAdapter() == null) {
                searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));
            } else {
                searchView.getSuggestionsAdapter().changeCursor(cursor);
            }

            return true;
        }
03-10 15:58:46.762    3767-3767/com.nikkis.vallabus  W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:46.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.612    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:58:48.622    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:58:48.632    3767-4304/com.nikkis.vallabus W/Filter﹕ An exception occured during performFiltering()!
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT stop.stopID AS _id, stop.address, stop_line.line FROM stop_line, stop WHERE stop.stopID = stop_line.stop AND stop.address LIKE '%%';
        at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:58)
        at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
        at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
        at android.widget.CursorFilter.performFiltering(CursorFilter.java:53)
        at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:213)
        at android.os.HandlerThread.run(HandlerThread.java:60)
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.652    3767-4304/com.nikkis.vallabus E/CursorWindow﹕ Failed to read row 0, column 0 from a CursorWindow which has 1 rows, 0 columns.
03-10 15:58:48.702    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.832    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
******************************破碎的原木*********************************

        // Associate searchView listeners
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));

            return true;
        }
    });
        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("QUERY STRING: "+newText);
            Cursor cursor = queryData(newText);
         /*   if (newText !="")
            searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));*/

            if (searchView.getSuggestionsAdapter() == null) {
                searchView.setSuggestionsAdapter(new BusStopCursorAdapter(getBaseContext(), cursor));
            } else {
                searchView.getSuggestionsAdapter().changeCursor(cursor);
            }

            return true;
        }
03-10 15:58:46.762    3767-3767/com.nikkis.vallabus  W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:46.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.612    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING:
03-10 15:58:48.622    3767-3767/com.nikkis.vallabus I/System.out﹕ QUERY STRING: adol
03-10 15:58:48.632    3767-4304/com.nikkis.vallabus W/Filter﹕ An exception occured during performFiltering()!
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT stop.stopID AS _id, stop.address, stop_line.line FROM stop_line, stop WHERE stop.stopID = stop_line.stop AND stop.address LIKE '%%';
        at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:58)
        at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
        at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
        at android.widget.CursorFilter.performFiltering(CursorFilter.java:53)
        at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:213)
        at android.os.HandlerThread.run(HandlerThread.java:60)
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
03-10 15:58:48.652    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 15:58:48.652    3767-4304/com.nikkis.vallabus E/CursorWindow﹕ Failed to read row 0, column 0 from a CursorWindow which has 1 rows, 0 columns.
03-10 15:58:48.702    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.792    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 15:58:48.832    3767-3767/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection

我非常感谢您的帮助,因为我在花了几个小时的搜索之后完全被卡住了。请提前感谢。

您已经把这件事复杂化了:不需要setOnQueryTextListener,只需拨打:

myCursorAdapter.setFilterQueryProvider(this);
searchView.setSuggestionsAdapter(myCursorAdapter);

oncreateoptions菜单中
,您需要您的活动来实现
FilterQueryProvider
,在它的
运行查询
中,您返回带有建议的
光标

您已经把这个问题复杂化了:不需要setOnQueryTextListener,只需调用:

myCursorAdapter.setFilterQueryProvider(this);
searchView.setSuggestionsAdapter(myCursorAdapter);

oncreateoptions菜单中
,您需要您的活动来实现
FilterQueryProvider
,在它的
运行查询
中,您返回带有建议的
光标

您已经把这个问题复杂化了:不需要setOnQueryTextListener,只需调用:

myCursorAdapter.setFilterQueryProvider(this);
searchView.setSuggestionsAdapter(myCursorAdapter);

oncreateoptions菜单中
,您需要您的活动来实现
FilterQueryProvider
,在它的
运行查询
中,您返回带有建议的
光标

您已经把这个问题复杂化了:不需要setOnQueryTextListener,只需调用:

myCursorAdapter.setFilterQueryProvider(this);
searchView.setSuggestionsAdapter(myCursorAdapter);

oncreateoptions菜单中
,您需要您的活动来实现
FilterQueryProvider
,在它的
运行查询
中,您返回带有建议的
光标

,刚刚尝试过。它就像一个符咒。该查询正在处理配置更改,不再崩溃。唯一的问题是我得到了每次配置更改时,logcat中都会出现以下异常:

03-10 19:39:06.542  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.622  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.672  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 19:39:08.252  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection

刚刚尝试过。它就像一个符咒。查询正在处理配置更改,不再崩溃。唯一的问题是每次配置更改时,我都会在logcat中得到这些异常:

03-10 19:39:06.542  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.622  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.672  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 19:39:08.252  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection

刚刚尝试过。它就像一个符咒。查询正在处理配置更改,不再崩溃。唯一的问题是每次配置更改时,我都会在logcat中得到这些异常:

03-10 19:39:06.542  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.622  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.672  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 19:39:08.252  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection

刚刚尝试过。它就像一个符咒。查询正在处理配置更改,不再崩溃。唯一的问题是每次配置更改时,我都会在logcat中得到这些异常:

03-10 19:39:06.542  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.622  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection
03-10 19:39:06.672  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection
03-10 19:39:08.252  30711-30711/com.nikkis.vallabus W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection


调用SetSuggestionAdapter一次,然后在该适配器中设置FilterQueryProvider,这样您就不需要任何setOnQueryTextListener:只需调用SetSuggestionAdapter()一旦进入OnCreateOptions菜单,谢谢你的anser pskink,但我想我遗漏了一些关于它的工作原理。我的假设是:1.你通过setOnQueryTextListener接收到一个新的输入文本。2.你用该文本查询数据库。3.数据库返回一个你更改为适配器的光标。4.建议列表视图得到更新。它是这样工作的吗?因为我无法理解它为什么失败。那个FilterQueryProvider是做什么的?不,不需要setOnQueryTextListener,只需调用myAdapter.setFilterQueryProvider(this)和searchView.SetSuggestionAdapter(myAdapter)在OnCreateOptionsMenumYaAdapter中可以是SimpleCorsAdapter,不需要一次自定义onecall SetSuggestionAdapter,也不需要在该适配器中设置FilterQueryProvider,也不需要任何setOnQueryTextListener:只需调用SetSuggestionAdapter()一旦进入OnCreateOptions菜单,谢谢你的anser pskink,但我想我遗漏了一些关于它的工作原理。我的假设是:1.你通过setOnQueryTextListener接收到一个新的输入文本。2.你用该文本查询数据库。3.数据库返回一个你更改为适配器的光标。4.建议列表视图得到更新。它是这样工作的吗?因为我无法理解它为什么失败。那个FilterQueryProvider是做什么的?不,不需要setOnQueryTextListener,只需调用myAdapter.setFilterQueryProvider(this)和searchView.SetSuggestionAdapter(myAdapter)在OnCreateOptions菜单中,Adapter可以是SimpleCorsAdapter,不需要一次自定义onecall SetSuggestionAdapter,也不需要在该适配器中设置FilterQueryProvider,也不需要任何setOnQueryTextListener:只需在OnCreate中调用SetSuggestionAdapter()