Android:从ListView中的XML处理程序加载大量数据
我正在解析一个大型XML文档,并在ListView中显示其内容。起初,我解析整个内容,然后一次显示所有内容,但这需要相当长的时间来加载(在某些设备上约30秒) 现在,只要我的SAX处理程序获得一个对象,我就将它添加到一个数组中,并通知我的列表适配器数据已更改。这带来了一个新问题,因为我正在快速刷新ListView,用户无法滚动或选择项目 有没有更有效的方法来处理这个问题Android:从ListView中的XML处理程序加载大量数据,android,xml,listview,listadapter,Android,Xml,Listview,Listadapter,我正在解析一个大型XML文档,并在ListView中显示其内容。起初,我解析整个内容,然后一次显示所有内容,但这需要相当长的时间来加载(在某些设备上约30秒) 现在,只要我的SAX处理程序获得一个对象,我就将它添加到一个数组中,并通知我的列表适配器数据已更改。这带来了一个新问题,因为我正在快速刷新ListView,用户无法滚动或选择项目 有没有更有效的方法来处理这个问题 谢谢。我想到两件事 确保您正在后台线程中加载数据 不要一次只加载一个对象,从而使UI无法正常工作。一批10个或任何对你的应用程
谢谢。我想到两件事
我想到两件事
我建议您在扩展
AsyncTask
的类中使用progressdialog
类MyAsyncLoad扩展了AsyncTask{
我建议您在扩展
AsyncTask
的类中使用progressdialog
类MyAsyncLoad扩展了AsyncTask{
所有内容都在后台线程中,但我一次加载一个UI对象。我将尝试批处理它,谢谢!所有内容都在后台线程中,但我一次加载一个UI对象。我将尝试批处理它,谢谢!
ProgressDialog myprogsdial;
@Override
protected void onPreExecute(){
myprogsdial = ProgressDialog.show(MyActivity.this, null, "Loading...", true);
}
@Override
protected Void doInBackground(Void... params) {
//here you are doing parsing stuff and load data into your datastructure, or whatever you use to store data from XML
return null;
}
@Override
protected void onPostExecute(Void result){
myprogsdial.dismiss();
//here you update the cursor,something like
adapter = new CursorAdapter(context, cursor...)
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
}