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

问题描述 投票:1回答:1

我有几个地方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();
                }

            }

        };
    }

}
java android-studio autocomplete textview
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.