我怀疑AutoCompleteTextView和支持它的自定义适配器。由于我使用的是自定义适配器,扩展ArrayAdapter<Locality>
的类(其中Locality是普通模型类),当用户键入一些文本但不从下拉列表中单击该项时,是否可以获取所选项。
例如,假设我使用setOnItemClickListener (AdapterView.OnItemClickListener l)。我可以得到哪个项目被点击并因此被选中。这看起来很简单,但如果用户在不单击建议下拉列表中的任何项目的情况下键入完整文本会发生什么。 onItemClick 永远不会触发,即使用户键入的文本是有效的项目文本(在我的情况下是位置名称),也不会有任何选定的项目。
一种选择是检查输入的文本,并使用该文本从服务器调用中找到匹配的位置。但这肯定看起来粗糙,所以我希望提出一些建议。
答案 0 :(得分:0)
您可以像这样
在autocompletetextview上设置addTextChangeListener myAutoComplete.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
readSearchTerm(s.getText().toString());
}
});
private List<String> readSearchTerm(String userInput) {
// TODO Auto-generated method stub
List<String> searchItemList = new ArrayList<String>();
try {
for (int i = 0; i < myObjectList.size(); i++) {
myObjectList.get(i).objectName = myObjectList.get(i).objectName
.replace(" ", "-");
String itemArray[] = myObjectList.get(i).objectName.split("-");
for (int j = 0; j < itemArray.length; j++) {
Log.i("mini", "Item:" + itemArray[j]);
if (itemArray[j].contains(userInput)) {
searchItemList.add(myObjectList.get(i).objectName);
break;
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return searchItemList;
}
根据您的代码更改读取搜索字词的方法。您将获得已过滤的列表或与该项目匹配的项目