Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Android:从ListView中的XML处理程序加载大量数据_Android_Xml_Listview_Listadapter - Fatal编程技术网

Android:从ListView中的XML处理程序加载大量数据

Android:从ListView中的XML处理程序加载大量数据,android,xml,listview,listadapter,Android,Xml,Listview,Listadapter,我正在解析一个大型XML文档,并在ListView中显示其内容。起初,我解析整个内容,然后一次显示所有内容,但这需要相当长的时间来加载(在某些设备上约30秒) 现在,只要我的SAX处理程序获得一个对象,我就将它添加到一个数组中,并通知我的列表适配器数据已更改。这带来了一个新问题,因为我正在快速刷新ListView,用户无法滚动或选择项目 有没有更有效的方法来处理这个问题 谢谢。我想到两件事 确保您正在后台线程中加载数据 不要一次只加载一个对象,从而使UI无法正常工作。一批10个或任何对你的应用程

我正在解析一个大型XML文档,并在ListView中显示其内容。起初,我解析整个内容,然后一次显示所有内容,但这需要相当长的时间来加载(在某些设备上约30秒)

现在,只要我的SAX处理程序获得一个对象,我就将它添加到一个数组中,并通知我的列表适配器数据已更改。这带来了一个新问题,因为我正在快速刷新ListView,用户无法滚动或选择项目

有没有更有效的方法来处理这个问题


谢谢。

我想到两件事

  • 确保您正在后台线程中加载数据
  • 不要一次只加载一个对象,从而使UI无法正常工作。一批10个或任何对你的应用程序有意义的数字

  • 我想到两件事

  • 确保您正在后台线程中加载数据
  • 不要一次只加载一个对象,从而使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();
    
            }
    
        }