【问题标题】:How to remove previous selected item from autocompletetextview如何从自动完成文本视图中删除以前选择的项目
【发布时间】:2020-09-11 21:46:06
【问题描述】:

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

这是自动完成文本视图搜索框代码之一:

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();
                }

            }

        };
    }

}

【问题讨论】:

    标签: java android-studio autocomplete textview


    【解决方案1】:

    解决方案:我看错了。实际上这样做的方法是将自动完成选择的位置保存在firebase实时数据库中。如果用户返回并删除文本,那么我使用 TextWatcher 检测文本更改并将其设置为从 firebase 实时数据库中删除地址。我仍然认为使用 Places 自动完成然后使用 Google 自动完成更好,因为这样我可以检测到文本更改.希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多