janoliver
janoliver

Reputation: 7824

Android: preloading list activity

I have a realtively complicated listview in my application, with data fetched from the internet and so on. What is the best practice to do to preload as much as possible of the ListView, such that it appears immediately on the screen?

For example, the standard SMS/MMS app of android shows a white screen with a spinning loader and "Loading..." before a conversation is shown. I can't really find this in the Android source code, but I guess this is an extra loading Activity doing some caching and handing over to the conversation Activity using finish(), so that no screen change animation is shown.

How can I preload or cache ListView items? Is it even possible to do that?

Thanks! Best regards, Jan Oliver

Upvotes: 0

Views: 3972

Answers (1)

Pentium10
Pentium10

Reputation: 207893

That's done with the help of AsyncTask (an intelligent backround thread) and ProgressDialog

When the AsyncTask starts we raise a progressdialog with indeterminate state, once the task is finished we dismiss the dialog.

Example code
What the adapter does in this example is not important, more important to understand that you need to use AsyncTask to display a dialog for the progress.

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

Upvotes: 1

Related Questions