Android:预加载列表活动

时间:2010-11-20 18:55:52

标签: android listview

我的应用程序中有一个非常复杂的列表视图,从互联网上获取数据等等。尽可能多地预加载ListView的最佳做法是什么,以便它立即显示在屏幕上?

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

如何预加载或缓存ListView项?甚至可以这样做吗?

谢谢!此致,Jan Oliver

1 个答案:

答案 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();
    }
}