SearchView建议不适用于一个角色

时间:2014-06-17 09:23:16

标签: android searchview

我的SearchView建议有问题,当我在SearchView写一个字符时,建议没有来。 但是当我在我的EditText的{​​{1}}中写下两个字符时,建议就会到来。

因此,当我在SearchView的{​​{1}}中写一个字符时,我希望我的建议已经出现,我该怎么办?

MainActivity的代码:

EditText

1 个答案:

答案 0 :(得分:26)

我自己找到了解决方案。它不干净但它会起作用。 我调试了SearchView,然后我从AutoCompleteTextView找到了SearchView的ID。比我将AutoCompleteTextView的阈值从2设置为1.现在它可以正常工作。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    mSearchView = (SearchView) searchItem.getActionView();

    // Solution
    int autoCompleteTextViewID = getResources().getIdentifier("android:id/search_src_text", null, null);
    AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) mSearchView.findViewById(autoCompleteTextViewID);
    searchAutoCompleteTextView.setThreshold(1);
    ///////////

    mSearchView.setSuggestionsAdapter(mAdapter);

    // onItemClick
    mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener()
    {
        @Override
        public boolean onSuggestionSelect(int position)
        {
            return false;
        }

        @Override
        public boolean onSuggestionClick(int position)
        {
            // Only for Test
            finish();
            return false;
        }
    });

    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextSubmit(String s)
        {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s)
        {
            final MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID, ""     });
            for (int i=0; i < mList.size(); i++)
            {
                if (mList.get(i).toLowerCase().startsWith(s.toLowerCase()))
                {
                    c.addRow(new Object[]{i, mList.get(i)});
                }
            }
            mAdapter.changeCursor(c);

            return false;
        }
    });
return true;
}