Как отобразить “Загрузку …” текст при получении объектов для ListView

Существуют приложения некоторых других, делающие это, как Твиттер, 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..." />
10
задан ישו אוהב אותך 28 September 2016 в 07:46
поделиться

2 ответа

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

Таким образом, сообщение "Loading..." - это просто последний элемент в ListView.

5
ответ дан 3 December 2019 в 22:34
поделиться

Это делается с помощью AsyncTask (интеллектуальный фоновый поток) и ProgressDialog

. Когда AsyncTask запускается, мы открываем диалоговое окно прогресса с неопределенным состоянием, как только задача выполнена, закрываем диалог.

Пример кода
То, что делает адаптер в этом примере, не важно, более важно понимать, что вам нужно использовать 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();
    }
}
7
ответ дан 3 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: