AutocompleteTextView未动态更新

时间:2016-04-27 22:15:08

标签: android autocompletetextview

我从API获取数据(List),我正在尝试使用此数据更新AutcompleteTextView

这就是我目前的做法:
我有TextWatcher调用方法来获取afterTextChanged中的数据,因此每次用户停止键入时都会调用该方法,并通过``notifyDataSetChanged:

通知适配器
//in onCreate
    addressAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,suggestions_address);
    at_address.setAdapter(addressAdapter);

...

@Override
        public void afterTextChanged(Editable s) {

            autoComplete(s);

            addressAdapter.notifyDataSetChanged();

            //suggestions_address is the updated list, and when I print it I can see the 
            //results so it is not empty
            Log.i("addresses",suggestions_address.toString());

        }

...

class SuggestionQueryListener implements ResultListener<List<String>> {
    @Override
    public void onCompleted(List<String> data, ErrorCode error) {
        if (error != ErrorCode.NONE) {
            Toast.makeText(MainActivity2.this,error.toString(),Toast.LENGTH_LONG).show();
        } else {
            suggestions_address.clear();
            for(int i = 0;i<data.size();i++){
                suggestions_address.add(data.get(i));
            }
        }
    }
}
public void autoComplete(CharSequence s) {
    try {

        String term = s.toString();
        TextSuggestionRequest request = null;
        request = new TextSuggestionRequest(term).setSearchCenter(new GeoCoordinate(48.844900, 2.395658));
        request.execute(new SuggestionQueryListener());
        if (request.execute(new SuggestionQueryListener()) != ErrorCode.NONE) {
            //Handle request error
            //...
        }
    } catch (IllegalArgumentException ex) {
        //
    }
}

但似乎适配器没有真正更新,因为当我输入内容时它没有显示建议。
另外,在使用AutoCompleteTextView执行此操作之前,我使用listView执行此操作,使用相同的过程,一切运行良好。

任何想法或解决方案都会非常感激

编辑:我注意到一些非常奇怪的事情:数据没有绑定到适配器,因为adapter#getCount总是返回0,即使列表不为空。但是当我删除at_address.setAdapter(addressAdapter)时,数据适配器会更新,adapter#getCount会返回正确数量的元素。

我现在真的很困惑,请帮忙!

1 个答案:

答案 0 :(得分:0)

而不是:

for(int i = 0;i<data.size();i++){
            suggestions_address.add(data.get(i));
        }

你可以使用这个:

suggestions_address.addAll(data);

你在启动请求后调用notifyDataSetChanged,你应该在得到结果并更新suggest_address后调用它,所以在onCompleted中调用notifyDataSetChanged