Jef*_*rod 7 android android-arrayadapter android-listview android-asynctask android-fragments
我需要填充ListView来自网络的数据,例如整个数据收集的2-3秒.我不希望用户看到加载Dialog并等待整个列表下载.相反,我希望在ListView每个项目可用时更新.
ArrayAdapter一个AsyncTask与OnProgressUpdate?notifyDatasetChanged()每次添加行后是否必须发出?Fragment/ Loader办法更好?在Activity模具之前完全取出数据并不重要(即Service不必要)
到目前为止我见过的最好的方法来自CommonsWare。在这个相关答案中找到了。
显然不带调用add没有任何问题notifyDatasetChanged()。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |