我正在尝试实现一个AutocompleteTextview,非常类似于我的Android应用中的谷歌自动完成功能。
我得到了所有的预测,但我仍然错过了一个功能。我希望下拉列表的第一个预测将显示在AutocompleteTextview的EditText中。此外,我希望当用户点击返回(或Tab)时选择该项目,就像谷歌在浏览器中一样。
有没有办法用Android的AutocompleteTextview做到这一点?
答案 0 :(得分:0)
使用Textwatcher
eds.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
答案 1 :(得分:0)
由于我无法找到从Adapter
扩展名“外部”获取当前建议列表的方法,我会执行以下操作:
免责声明:我从未尝试过这样的事情,也没有资源可以立即尝试,愤怒的老板危险。
假设您正在扩展具有内部过滤器的Adapter
进行过滤过程,您应该覆盖publishResults()
方法。我的提示是:声明类型为String that when
的类范围变量publishResults()is called, also sets it to the first of the
FilterResults`字符串:
@Override
protected void publishResults(final CharSequence constraint, final FilterResults results) {
currentObjects = (List<T>) results.values;
if (results.count > 0) {
myFirstSuggestion = currentObjects.toString();
notifyDataSetChanged();
}
else
notifyDataSetInvalidated();
}
此外,创建一个名为getFirstSuggestion()
的新方法,该方法将返回此myFirstSuggestion
字符串。
现在:如何触发它?似乎AutoCompleteTextView
已经实现了这个监听器:
onFilterComplete(int count)
通知过滤操作结束。
所以基本上要走的步骤是:
AutoCompleteTextView
在内部,使用以下发货地址获取第一个建议:
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.your_actv_id);
ListAdapter adapter = actv.getAdapter();
String firstSuggestion = adapter.getFirstSuggestion();
actv.setHint(firstSuggestion);
对于第二个问题,您需要覆盖onEditorAction
方法,类似这样的
actv.OnEditorActionListener enter = new actv.OnEditorActionListener() {
public boolean onEditorAction(AutoCompleteTextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
ListAdapter adapter = view.getAdapter();
String firstSuggestion = adapter.getFirstSuggestion();
view.setHint(firstSuggestion);
}
return true;
}
};
免责声明也适用于后者,可能如果我以前的想法有效,也可以。