如何在我需要时显示Search View的建议/历史记录窗口

时间:2016-07-19 05:29:39

标签: android searchview

我有一个搜索视图,我想先显示历史记录或一些建议

为了测试我在搜索视图获得焦点时调用了loadHistory方法,但最初没有显示它。

请有人帮忙吗...

代码// loadHistory在OnFocusChanged和OnQueryText

上调用
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.searchmenu, menu);
    switchItem = menu.findItem(R.id.BTN_searchSet);

    final MenuItem searchItem = menu.findItem(R.id.menu_search);

    searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchUser = true;
    searchView.setIconified(false);
    sACTV = (AutoCompleteTextView) searchView.findViewById(R.id.search_src_text);
    sACTV.setThreshold(1);

    searchView.clearFocus();
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            loadHistory();
        }
    });
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            input.put("search", s);
            if (searchUser) {
                sdbr.execSQL("delete from profilehistory where search = '" + s + "'");
                sdbw.execSQL("insert into profilehistory (search, datetime) values ('" + s + "', datetime())");
                searchprofile();
            } else {
                history = "";
                sdbr.execSQL("delete from hashhistory where search = '" + s + "   '");
                sdbw.execSQL("insert into hashhistory (search, datetime) values ('" + s + "', datetime())");
                searchhash(false);
            }

            return true;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            loadHistory();
            return false;
        }
    });
    return true;
}

private void loadHistory() {

    String str = searchView.getQuery().toString();
    Log.d("test", "load //"+str);
    Cursor c;
    if (searchUser) {
        if(str.length()==0) c = sdbr.rawQuery("select _id, search from profilehistory order by datetime desc", null);
        else {
            c = sdbr.rawQuery("select _id, search from profilehistory where search like '" + str + "%' order by datetime desc", null);
        }

    } else {
        if(str.length()==0) c = sdbr.rawQuery("select _id, search from hashhistory order by datetime desc", null);
        else {
            c = sdbr.rawQuery("select _id, search from hashhistory where search like '" + str + "%' order by datetime desc", null);
        }

    }

    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    searchView.setSearchableInfo(manager.getSearchableInfo(getComponentName()));

    searchView.setSuggestionsAdapter(new HistoryAdapter(this, c));

    if(str.length()==0) {
        Log.d("test", "showDropDown");
        sACTV.showDropDown();
    }
}

The logs//
1. At first, gained touch which does call the onBind methods but does not show the suggestions
D/test: load //
D/test: showDropDown
D/AbsListView: Get MotionRecognitionManager
D/test: Asdfg
D/test: Asdf
D/test: Asd
D/test: As
D/test: A

2. typed A
works all right

D/test: load //A
D/AbsListView: Get MotionRecognitionManager
D/test: Asdfg
D/test: Asdf
D/test: Asd
D/test: As
D/test: A
D/AbsListView: unregisterIRListener() is called 
D/test: Asdfg
D/test: Asdf
D/test: Asd
D/test: As
D/test: A
D/AbsListView: unregisterIRListener() is called 
D/AbsListView: unregisterIRListener() is called 
D/AbsListView: unregisterIRListener() is called

0 个答案:

没有答案