我的应用程序中有一个非常复杂的列表视图,从互联网上获取数据等等。尽可能多地预加载ListView的最佳做法是什么,以便它立即显示在屏幕上?
例如,android的标准SMS / MMS应用程序在显示对话之前显示带有旋转加载程序的白屏和“正在加载...”。我无法在Android源代码中找到这个,但我想这是一个额外的加载Activity做一些缓存并使用finish()移交给对话Activity,这样就不会显示任何屏幕更改动画。
如何预加载或缓存ListView项?甚至可以这样做吗?
谢谢!此致,Jan Oliver
答案 0 :(得分: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();
}
}