2010-11-20 82 views
0

我在我的应用程序中有一个复杂的listview,数据从互联网上获取等等。尽可能多地预先装载ListView,以便它立即出现在屏幕上,最佳做法是什么?Android:预加载列表活动

例如,android的标准SMS/MMS应用程序在显示对话之前显示带有旋转加载器和“加载...”的白色屏幕。我在Android源代码中找不到这个,但我想这是一个额外的加载Activity,使用finish()来执行一些缓存并交给对话Activity,以便不显示屏幕更改动画。

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

谢谢!最好的问候,扬奥利弗

回答

1

这与AsyncTask帮助(智能底色线程)和ProgressDialog

时候做的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(); 
    } 
} 
+0

亲爱的Pentium10,谢谢你的回答!这可能对我有很大帮助,尽管我的应用程序中耗时的部分是对ListAdapter的getView()方法的调用。但无论如何:是否有必要为onCreate方法中的ListView提供适配器?他们是怎么做到的?有一个空虚拟列表或什么?另外,这个加载动画的白色屏幕只是一个覆盖整个屏幕的Progressdialog?提前致谢! – janoliver 2010-11-20 19:27:08

+0

您可以在列表视图上提供适配器,即使它是空的。然后,您可以稍后添加项目,并且可以调用notifyDatasetChanged事件来刷新ListView。您可以将视图缓存在某个类对象中供以后使用。 – Pentium10 2010-11-20 20:08:41