Android:预加载列表活动

Android:预加载列表活动,android,listview,Android,Listview,我的应用程序中有一个非常复杂的listview,其中包含从internet获取的数据等等。要尽可能多地预加载ListView,使其立即显示在屏幕上,最佳做法是什么 例如,android的标准SMS/MMS应用程序在显示对话之前会显示一个带有旋转加载程序和“加载…”的白色屏幕。我在Android源代码中找不到这一点,但我想这是一个额外的加载活动,使用finish()进行缓存并将其移交给对话活动,这样就不会显示屏幕更改动画 如何预加载或缓存ListView项目?甚至有可能做到这一点吗 谢谢!向你致意

我的应用程序中有一个非常复杂的listview,其中包含从internet获取的数据等等。要尽可能多地预加载ListView,使其立即显示在屏幕上,最佳做法是什么

例如,android的标准SMS/MMS应用程序在显示对话之前会显示一个带有旋转加载程序和“加载…”的白色屏幕。我在Android源代码中找不到这一点,但我想这是一个额外的加载活动,使用finish()进行缓存并将其移交给对话活动,这样就不会显示屏幕更改动画

如何预加载或缓存ListView项目?甚至有可能做到这一点吗


谢谢!向你致意,简·奥利弗(Jan Oliver)

这是在(一个智能回传线程)和

当AsyncTask启动时,我们将引发一个状态不确定的progressdialog,一旦任务完成,我们将关闭该对话框

示例代码
适配器在本例中的作用并不重要,更重要的是要理解您需要使用AsyncTask来显示进度对话框

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > {
    ProgressDialog dialog;
    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(viewContacts.this);
        dialog.setMessage(getString(R.string.please_wait_while_loading));
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }
    /* (non-Javadoc)
     * @see android.os.AsyncTask#doInBackground(Params[])
     */
    @Override
    protected ContactsListCursorAdapter doInBackground(Void... params) {
        cur1 = objItem.getContacts();
        startManagingCursor(cur1);

        adapter1 = new ContactsListCursorAdapter (viewContacts.this,
                R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {});

        return adapter1;
    }

    protected void onPostExecute(ContactsListCursorAdapter result) {
        list.setAdapter(result);
        dialog.dismiss();
    }
}
private类PrepareAdapter1扩展异步任务{
进程对话;
@凌驾
受保护的void onPreExecute(){
dialog=新建ProgressDialog(viewContacts.this);
setMessage(getString(R.string.please_wait_,while_loading));
对话框。setUndeterminate(true);
对话框。可设置可取消(false);
dialog.show();
}
/*(非Javadoc)
*@see android.os.AsyncTask#doInBackground(Params[])
*/
@凌驾
受保护的联系人列表光标或适配器doInBackground(无效…参数){
cur1=objItem.getContacts();
开始管理光标(cur1);
adapter1=新联系人列表光标或适配器(viewContacts.this,
R.layout.contact_for_listitem,cur1,新字符串[]{},新int[]{});
返回适配器1;
}
PostExecute上受保护的void(ContactsListCursorAdapter结果){
list.setAdapter(结果);
dialog.dismise();
}
}

亲爱的奔腾10,感谢您的回答!这可能对我有很大帮助,尽管我的应用程序中最耗时的部分是调用ListAdapter的getView()方法。但是无论如何:是否有必要在onCreate方法中为ListView提供一个适配器?他们是怎么做到的?用一个空的虚拟列表还是什么?还有,这个加载动画的白色屏幕只是一个覆盖整个屏幕的对话框?提前谢谢!您可以在listview上提供适配器,即使它是空的。然后,您可以稍后向其添加项目,并且可以调用notifyDatasetChanged事件来刷新ListView。您可以将视图缓存在某个类对象中以供以后使用。