Как отобразить текст "Загрузка..." при извлечении элементов для ListView

Есть и другие приложения, такие как Twitter, Facebook или даже собственные приложения, такие как Android Market. Когда вы хотите отобразить список элементов, извлеченных из Интернета, это выглядит как стандартный способ отображения пользователю уведомления о действии. Это белый фон с анимированным вращающимся колесом и текстом "Загрузка...".

Кто-нибудь знает, как это сделать?

Я смог сделать что-то похожее с этим кодом, но мне он еще не очень нравится. Продолжается работа:

<ListView android:id="@+id/post_list" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

   <TextView android:id="@android:id/loading" 
       android:background="@color/white"
       android:layout_width="fill_parent"     
       android:layout_height="fill_parent" 
       android:gravity="center" android:text="Loading..." />

Ответ 1

Когда пользователь прокручивает нижнюю часть вашего адаптера, getView должен возвращать представление с текстом "Загрузка.." и прокручиванием. В то же время следует запустить AsyncTask или фоновый поток, который загружает новый фрагмент контента. Когда содержимое готово, вызывается адаптер .notifyDatasetChanged() и ListView повторно отображает весь контент, включая новые элементы.

Итак, сообщение "Загрузка..." - это всего лишь последний элемент в ListView.

Ответ 2

Это делается с помощью 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();
    }
}

Ответ 3

Я не знаю, будет ли это полностью соответствовать вашему требованию, простой способ - это просто установить исходный текст загрузки на андроид-пустой-id-view, например

 <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Loading... Please Wait"
        android:textSize="20dip" />

и если элементы списка не найдены, то установите для android-empty-id-view другое сообщение в асинхронном обратном вызове

((TextView) findViewById(android.R.id.empty)).setText("Your List is empty");

он даст достаточно указания пользователю о том, что что-то прогрессирует.. Список загружается