Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask中的Android-setAdapter()_Java_Android_Android Listview_Android Asynctask_Android Adapter - Fatal编程技术网

Java AsyncTask中的Android-setAdapter()

Java AsyncTask中的Android-setAdapter(),java,android,android-listview,android-asynctask,android-adapter,Java,Android,Android Listview,Android Asynctask,Android Adapter,我需要用AsyncTask填充ListView。 此代码起作用,文本视图更改为“开始”,然后更改为“结束”。但ListView为空,不显示。在日志中,我看到“array=3” 包a.test3; 导入java.util.ArrayList; 导入a.test3.main活动; 导入a.test3.R; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.app.Activity; 导入android.util.Log; 导入android

我需要用AsyncTask填充ListView。 此代码起作用,文本视图更改为“开始”,然后更改为“结束”。但ListView为空,不显示。在日志中,我看到“array=3”

包a.test3;
导入java.util.ArrayList;
导入a.test3.main活动;
导入a.test3.R;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.app.Activity;
导入android.util.Log;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
地堑;
文本视图文本视图;
ListView lvMain;
ArrayList结果_arr=新的ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=新的textView(此);
lvMain=(ListView)findViewById(R.id.listView1);
mt=新的抓取URL();
mt.execute();
}
公共类GrabURL扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
setText(“开始”);
setContentView(文本视图);
}
@凌驾
受保护的ArrayList doInBackground(无效…参数){
结果加上(“a”);
结果加上(“b”);
结果加上(“c”);
返回结果_arr;
}
@凌驾
受保护的void onPostExecute(ArrayList结果){
super.onPostExecute(结果);
Log.d(“info”,“array=“+result.size());
textView.setText(“结束”);
setContentView(文本视图);
ArrayAdapter=新的ArrayAdapter(MainActivity.this,
android.R.layout.simple_list_item_1,结果);
lvMain.setAdapter(适配器);
}
}
}
请告诉我,我做错了什么?

看看你的代码

        textView.setText("End");
        setContentView(textView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_1, result_arr);
        lvMain.setAdapter(adapter);
如果仍不起作用,请添加

textView.invalidate();

您缺少对Adapter.notifyDataSetChanged()的调用。您的代码应该如下所示

@Override
protected void onPostExecute(ArrayList<String> result) {
    ...
    lvMain.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}
@覆盖
受保护的void onPostExecute(ArrayList结果){
...
lvMain.setAdapter(适配器);
adapter.notifyDataSetChanged();
}

您不需要通知。Notify用于告诉观察者适配器内的数据集已关闭,而不是在您将新适配器设置为ListView时。谢谢!这是一个非常详细和全面的回应。
textView.invalidate();
@Override
protected void onPostExecute(ArrayList<String> result) {
    ...
    lvMain.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}