Android adapter.notifyDataSetChanged()不起作用?

时间:2011-10-06 00:23:00

标签: android

我正在编写一个应用程序,需要从用户那里获取输入,将其传递给服务器,该服务器返回一个JSON字符串,然后在ListView中显示其解析的内容。我正在通过扩展AsyncTask来实现这一目标:

//stripped down version
public class main extends ListActivity {

ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
final EditText input = (EditText)findViewById(R.id.input);


input.addTextChangedListener(new TextWatcher() {    
    public void onTextChanged(CharSequence s, int start, int before, int count) {   
            if(!input.getText().toString().equals("")) {
            new GetDataTask().execute(input.getText().toString());
        }

    }   
});

private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> {
        protected ArrayList<String> doInBackground(String... query) {

        URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere");
        URLConnection conn = url.openConnection();
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            ArrayList<String> items = new ArrayList<String>();
        //the code that parses the JSON goes here; it writes some strings to items
        return items;
        }

        protected void onPostExecute(ArrayList<String> items) {
            listItems = items;
        adapter.notifyDataSetChanged();
        }
}

}

(这是我的第一篇文章,所以如果我试图让代码块失败,我会提前道歉)

在onPostExecute方法中,在设置listItems等于items之后,如果我打印listItems的内容,它们就是我想要的。但是,由于某种原因,当从onPostExecute执行时,adapter.notifyDataSetChanged()似乎什么都不做(当它从主线程调用时,它工作正常)。

如果有人知道发生了什么和/或如何解决它,我真的很感激。谢谢!

1 个答案:

答案 0 :(得分:21)

你可以试试吗

    protected void onPostExecute(ArrayList<String> items) {
        listItems.clear();
        listItems.addAll(items);
        adapter.notifyDataSetChanged();
    }

我希望你已经在做这件事了

adapter = new ArrayAdapter<String>(listItems);