這聽起來很簡單,但對我來說很難。我有一個顯示用戶位置地址的自動完成textview。如果用戶輸入除位置以外的其他位置,我還實現了一個地址API來獲取地址。一切都按照它應有的方式工作,但即使已經有地址,地點結果仍然顯示。爲了降低成本,我希望僅在用戶輸入地址時才能獲得地址結果。我做了一個全球性的布爾值,並將其設置真當文本被改變,像這樣:如何僅在用戶輸入文字時獲得自動填充結果
autocomplete.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
isTextEntered = true; //to get autocomplete get results only after user enters text
}
@Override
public void afterTextChanged(Editable s) {
}
});
然後我檢查時,我把我的適配器作爲這樣的布爾是真實的:
if (isTextEntered) {
autocomplete.setAdapter(new GooglePlacesAutocompleteAdapter(this, R.layout.search_results_list_item, R.id.tvSearchResultItem));
autocomplete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final String selectedPlace = (String) parent.getItemAtPosition(position);
autocomplete.setText(selectedPlace);
}
});
}
但這樣做在我的活動的oncreate方法只是阻止自動完成顯示任何地方提示結果。我怎樣才能在這裏完成我的目標?像往常一樣,任何幫助都非常感謝。
這是我的自定義適配器類:
class GooglePlacesAutocompleteAdapter extends ArrayAdapter implements Filterable {
private ArrayList resultList;
//private ArrayList<HashMap<String, Place>> results = new ArrayList<>();
public GooglePlacesAutocompleteAdapter(Context context, int list, int textViewResourceId) {
super(context, list, textViewResourceId);
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public String getItem(int index) {
return resultList.get(index).toString();
}
//@Override
//public HashMap<String, Place> getItem(int index) {return results.get(index);}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
filterResults.values = resultList;
filterResults.count = resultList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
return filter;
}
}
不需要'TextWatcher'和'OnItemClickListener',它由'AutoCo完成所有你需要的是提供過濾數據到適配器 – pskink
@pskink我正在實現AutocompleteTextView類的TextWatcher和OnItemClickListener接口。我不明白你的意思。 –
看到我的答案[這裏](http://stackoverflow.com/a/19860624/2252830) – pskink