繁体   English   中英

如何从自动完成文本视图中删除以前选择的项目

[英]How to remove previous selected item from autocompletetextview

我有几个地方autocompletetextview,允许用户 select 多个位置。 然后通过按下下一步按钮将这些位置传递到下一个 java 页面,以从用户选择的位置绘制路线。 现在,如果用户单击“后退”按钮并从其中一个自动完成文本视图框中删除文本并再次单击 NEXT 按钮,则该 textview 框中的地址不会被删除,我仍然会在绘制路线的 java 页面中选择上一个位置. 我想我应该使用 TextWatcher 来获取 onTextChanged 或 afterTextChanged 以了解用户何时从 textview 框中删除文本。所以,我的问题是:当用户从 textview 搜索框中删除文本时,如何删除或清除先前选择的位置?

这是 autocompletetextview 搜索框代码之一:

 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 Autocomplete 更好,因为这样我可以检测到文本更改. 希望这对其他人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM