如何在AutoCompleteTextView
中获得当前的最高建议?我有它建议项目,我有一个文本更改监听器注册。我在同一个屏幕上也有一个列表。在键入时,我想将列表滚动到当前的“最佳”建议。但我无法弄清楚如何访问当前的建议,或至少是最重要的建议。我想我正在寻找像AutoCompleteTextView.getCurrentSuggestions()
:
autoCompleteTextView.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
String currentText = autoCompleteTextView.getText();
String bestGuess = autoCompleteTextView.getCurrentSuggestions()[0];
// ^^^ mewthod doesn't exist
doSomethingWithGuess(bestGuess);
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// do nothing
}
public void afterTextChanged(Editable s) {
// do nothing
}
});
答案 0 :(得分:16)
我已经使用以下代码完成了您想要做的事情:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocomplete_1);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
textView.setAdapter(adapter);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
Log.d(TAG, "dataset changed");
Object item = adapter.getItem(0);
Log.d(TAG, "item.toString "+ item.toString());
}
});
}
item.toString将打印第一个项目上显示的文本。
请注意,即使您尚未显示弹出窗口(建议),也会发生这种情况。此外,您应该检查是否有任何项目通过了过滤条件(也就是用户的输入)。
解决第一个问题:
int dropDownAnchor = textView.getDropDownAnchor();
if(dropDownAnchor==0) {
Log.d(TAG, "drop down id = 0"); // popup is not displayed
return;
}
//do stuff
要解决第二个问题,请使用getCount&gt; 0
答案 1 :(得分:1)
AutoCompleteTextView不会向下滚动到最佳选择,但会在您键入时缩小选择范围。以下是它的示例:http://developer.android.com/resources/tutorials/views/hello-autocomplete.html
正如我从AutoCompleteTextView看到的那样,无法获得当前的建议列表。
唯一的方法似乎是编写ArrayAdapter的自定义版本并将其传递给AutoCompleteTextView.setAdapter(..)。这是source to ArrayAdapter。您只能更改内部类ArrayFilter.performFiltering()中的方法,以便它公开FilterResults:
..将字段添加到内部类ArrayFilter:
public ArrayList<T> lastResults; //add this line
..方法结束前执行过滤:
lastResults = (ArrayList<T>) results; // add this line
return results;
}
像这样使用它(改编自链接的例子):
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
CustomArrayAdapter<String> adapter = new CustomArrayAdapter<String>(this, R.layout.list_item, COUNTRIES);
textView.setAdapter(adapter);
// read suggestions
ArrayList<String> suggestions = adapter.getFilter().lastResult;