作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要用来自网络的数据填充一个很长的 ListView
,比如整个数据收集需要 2-3 秒。我不希望用户看到正在加载的 Dialog
并等待整个列表下载。相反,我想在每个项目可用时更新 ListView
。
OnProgressUpdate
从 AsyncTask
添加到 ArrayAdapter
?notifyDatasetChanged()
?Fragment
/Loader
方法更好吗?在 Activity
结束之前完全获取数据并不重要(即 Service
是不必要的)
最佳答案
到目前为止我见过的最好的方法来自 CommonsWare .在这个相关answer中找到.
显然,在没有 notifyDatasetChanged()
的情况下调用 add
没有任何问题。
public class AsyncDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet", "consectetuer",
"adipiscing", "elit", "morbi",
"vel", "ligula", "vitae",
"arcu", "aliquet", "mollis",
"etiam", "vel", "erat",
"placerat", "ante",
"porttitor", "sodales",
"pellentesque", "augue",
"purus"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList<String>()));
new AddStringTask().execute();
}
class AddStringTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String item : items) {
publishProgress(item);
SystemClock.sleep(200);
}
return(null);
}
@Override
protected void onProgressUpdate(String... item) {
((ArrayAdapter<String>)getListAdapter()).add(item[0]);
}
@Override
protected void onPostExecute(Void unused) {
Toast
.makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
.show();
}
}
}
关于android - 如何将行异步添加到 ListView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995429/
我是一名优秀的程序员,十分优秀!