【问题标题】:Android AutoCompleteTextView with Geocoder带有地理编码器的 Android AutoCompleteTextView
【发布时间】:2015-06-27 17:22:10
【问题描述】:

我想将AutoCompleteTextViewGeocoder 一起使用,但是当我开始输入时,建议不会弹出。

我不明白为什么不弹出建议?有什么解决办法吗?

这是我的代码:

ArrayList<String>addressList = new ArrayList<String>();
ArrayAdapter<String>   adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, addressList);
autoComplete.setAdapter(adapter);

    autoComplete.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(final CharSequence s, int start, int before, int count) {
             getAddressInfo(getActivity(), location, s.toString());              
             }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

 private void getAddressInfo(Context context, Location location, String locationName){
    Geocoder geocoder = new Geocoder(context, Locale.getDefault());

    try {
        List<Address> a = geocoder.getFromLocationName(locationName, 5);

        for(int i=0;i<a.size();i++){
            String city = a.get(0).getLocality();
            String country = a.get(0).getCountryName();
            String address = a.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
            addressList.add(address+", "+city+", "+country);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }

    adapter.notifyDataSetChanged();
}

【问题讨论】:

标签: android geolocation textview autocompletetextview textwatcher


【解决方案1】:

从您提供的代码中我可以看出,您可能忘记在您正在使用的 AutoCompleteTextView 上设置阈值。阈值决定了用户在出现建议之前必须输入多少个字符;如果您不设置阈值,则不会显示任何结果。

在设置适配器之前尝试这样做:

public void setupAutoCompleteTextView(AutoCompleteTextView autoCompleteTextView) {
    ArrayAdapter<String>   adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, addressList);
    autoCompleteTextView.setThreshold(1);
    autoCompleteTextView.setAdapter(adapter);

    autoCompleteTextView.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(final CharSequence s, int start, int before, int count) {
            getAddressInfo(MainActivity.this, s.toString());
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

private void getAddressInfo(Context context, String locationName){
    Geocoder geocoder = new Geocoder(context, Locale.getDefault());

    try {
        List<Address> a = geocoder.getFromLocationName(locationName, 5);

        for(int i=0;i<a.size();i++){
            String city = a.get(i).getLocality();
            String country = a.get(i).getCountryName();
            String address = a.get(i).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
            addressList.add(address+", "+city+", "+country);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }
}

希望有帮助!

【讨论】:

  • 我将您的代码复制到 github 存储库 (github.com/aaemman/AutoCompleteTextViewExampleForZookey) 中,并且在添加阈值调用后能够获得自动完成建议。我想提一下,Geocoder 的实现(我不是很熟悉)并没有用非常完整的建议列表填充 addressList;您是否尝试使用已知字符串填充列表以验证问题不在于您的 Geocoder 实现?
  • 嘿,非常感谢。请编辑您的答案并发布代码,它可以工作,但有一个小缺点。至少对我来说,仅当阈值为 1 时才显示弹出窗口。如果我输入任何其他值,例如 2、3、4,它就不起作用。它对你有用吗?
  • 那么将阈值更改为其他值呢?
  • 抱歉回复晚了;您应该可以只增加阈值声明中的值;我能够使它与此答案中发布的代码一起使用;如果您仍然遇到问题,我建议您在连接到地理编码器之前尝试使用已知字符串列表进行测试。
猜你喜欢
  • 2020-12-29
  • 2016-03-20
  • 2015-07-16
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多