我有几个地方autocompletetextview,允许用户选择多个地点。这些位置通过按下Next按钮传递到下一个java页面,从用户选择的位置中画出一条路线。现在,如果用户点击 "后退 "按钮,并从其中一个自动完成的extview框中删除文本,然后再次点击 "下一步 "按钮,则该文本view框中的地址不会被删除,我仍然会在绘制路由的java页面中得到之前选择的位置。我想我应该使用TextWatcher来获取onTextChanged或afterTextChanged来知道用户何时从其中一个文本视图框中删除文本。所以,我的问题是:当用户从文本视图搜索框中删除文本时,如何删除或清除之前选择的位置?
这是其中一个自动完成文本框搜索框的代码。
final AutoCompleteTextView location3 = findViewById(R.id.autocomplete3);
location3.setAdapter(new PlaceAutoSuggestAdapter(AddstopPage.this, android.R.layout.simple_dropdown_item_1line));
location3.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) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
clear_text3 = findViewById(R.id.clear_text3);
clear_text3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
location3.getText().clear();
}
});
location3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
location3.setCursorVisible(true);
}
});
location3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("Address : ", location3.getText().toString());
value = parent.getItemAtPosition(position).toString();
LatLng latLng = getLatLngFromAddress(location3.getText().toString());
if (latLng != null) {
latlng3 = String.valueOf(latLng);
Log.d("Lat Lng : ", " " + latLng.latitude + " " + latLng.longitude);
Address address = getAddressFromLatLng(latLng);
if (address != null) {
Log.d("Address : ", "" + address.toString());
Log.d("Address Line : ", "" + address.getAddressLine(0));
Log.d("Phone : ", "" + address.getPhone());
Log.d("Pin Code : ", "" + address.getPostalCode());
Log.d("Feature : ", "" + address.getFeatureName());
Log.d("More : ", "" + address.getLocality());
} else {
Log.d("Adddress", "Address Not Found");
}
} else {
Log.d("Lat Lng", "Lat Lng Not Found");
}
}
});
这是我的适配器页面代码
public class PlaceAutoSuggestAdapter extends ArrayAdapter implements Filterable {
private ArrayList<String> results;
private PlaceApi placeApi=new PlaceApi();
public PlaceAutoSuggestAdapter(Context context,int resId){
super(context,resId);
}
@Override
public int getCount(){
return results.size();
}
@Override
public String getItem(int pos){
return results.get(pos);
}
@NotNull
@Override
public Filter getFilter(){
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults=new FilterResults();
if(constraint!=null){
results=placeApi.autoComplete(constraint.toString());
filterResults.values=results;
filterResults.count=results.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results1) {
if(results1 !=null && results1.count>0){
notifyDataSetChanged();
}
else{
notifyDataSetInvalidated();
}
}
};
}
}
解决:我看错了.其实这样做的方法是将自动完成中选择的地点保存在firebase实时数据库中.如果用户返回并删除文本,那么我使用TextWatcher来检测文本变化,我设置它从firebase实时数据库中删除地址.我仍然认为使用Places自动完成然后Google自动完成更好,因为这样我可以检测文本变化. 希望能帮到别人。