我的SearchView
建议有问题,当我在SearchView
写一个字符时,建议没有来。
但是当我在我的EditText
的{{1}}中写下两个字符时,建议就会到来。
因此,当我在SearchView
的{{1}}中写一个字符时,我希望我的建议已经出现,我该怎么办?
MainActivity的代码:
EditText
答案 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;
}