Android adapter.notifyDataSetChanged() 不工作?

标签 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() 似乎什么都不做(当它从主线程调用时,它工作正常)。

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

最佳答案

你能试试这个吗

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

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

adapter = new ArrayAdapter<String>(listItems);

关于Android adapter.notifyDataSetChanged() 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669199/

相关文章:

android - 如何通过appium+selenium将屏幕截图保存到android设备

android - 如何使用 OpenCV 从图像中检测(计数)头发?

Android wear 2.0 通知

android - 使用 NDK 构建音频处理 Little Endian SDK

android - SlidingMenu 显示不正确

android - 为什么谷歌播放服务依赖自动添加了 com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE 权限

java - 显示当前日期时出错

Android NDK线程无效使用非静态成员函数

android - 视频背景自动播放无法在移动设备 (Wordpress) 上运行

java - 我应该为每个 Activity 实例化一个新的 Facebook 变量,还是使用静态 Facebook 变量