ArrayList更改后Android AutoCompleteTextView适配器不更新

时间:2015-01-29 09:25:08

标签: android android-arrayadapter

当用户输入AutoCompleteTextView时,我希望从Web服务中获取一些结果并将其显示在框中。

为此我全球宣布

ArrayAdapter<String> adapter;
autoCompleteText;
ArrayList<String> searchList;

我把它放在我的onCreate()中。 searchList是一个ArrayList,我将从Web服务中获取结果。 Search()是我的网络服务搜索。我希望它在用户输入至少3个字符后搜索,以便我在字段上使用TextWatcher。

    adapter = new ArrayAdapter<String>(MyActivity.this
            , android.R.layout.simple_list_item_1, searchList);
    autoCompleteText.setAdapter(adapter);
    autoCompleteText.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
            if (s.length() >= 3) {
                new Search().execute(null, null, null);
            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
    });

来自Search()的方法 - 在我更新searchList的AsyncTask中的GET请求

@Override
    protected void onPostExecute(final Void unused) {
        dlg.dismiss();
        if (result != null) {
            try {
                JSONObject myJson = new JSONObject(result.substring(4));

                JSONObject resp = myJson.getJSONObject("response");
                for (Iterator<String> iterator = resp.keys(); iterator.hasNext();) {
                    String key = iterator.next();
                    System.out.println(key + " = " + resp.getString(key));
                    if(! searchList.contains(resp.getString(key)))
                        searchList.add(resp.getString(key));
                }

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

    }
}

我更喜欢使用ArrayAdapter而不是CustomAdapter。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

更改列表后,尝试在onPostExecute()中调用notifyDataSetChanged()。

答案 1 :(得分:0)

这是我更新AutoCompleteTextView

的方式
String[] data = terms.toArray(new String[terms.size()]);  
// terms is a List<String>
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(activity, android.R.layout.simple_dropdown_item_1line, data);
keywordField.setAdapter(adapter);  // keywordField is a AutoCompleteTextView
if(terms.size() < 40) keywordField.setThreshold(1); 
else keywordField.setThreshold(2);

现在当然,这是静态的,并没有处理无线的建议,但我也建议您在将更改分配给AutoCompleteTextView后通知适配器:

adapter.notifyDataSetChanged();