Скрытие индикатора «Загрузка ...» при реализации ListFragment - PullRequest
9 голосов
/ 13 февраля 2012

Я создал отображение, используя Fragments, оба из которых заполняются данными, полученными из Интернета.Хотя сам код работает, как и ожидалось, без каких-либо проблем, один из фрагментов (реализованный как ListFragment) отображает неопределенный индикатор прогресса внутри фрагмента, который перекошен в сторону.Я хочу удалить индикатор и использовать другой ProgressDialog, который я использовал вместо индикатора.

Проводя некоторые исследования, я обнаружил функцию setListShownNoAnimation() (задокументировано здесь ) вListFragment класс, но следующие попытки не сработали:

  • Вызов setListShownNoAnimation () в фрагменте onActivityCreated()
  • Вызов в родительском действии onCreate
  • Вызов его в фрагменте onCreateView() (это вызвало IllegalStateException)

Как убрать индикатор прогресса фрагмента?

Ответы [ 3 ]

24 голосов
/ 24 июля 2012

Правильный способ сделать это - вызвать:

setListShown(true);

, когда вам нужно скрыть ProgressBar и показать ListView.Позвоните, когда закончите получать данные в фоновом режиме и готовы показать список.

1 голос
/ 16 февраля 2012

Этот обходной путь может быть не лучшим методом для решения этой проблемы, но он работает хорошо:

Сначала я сделал так, чтобы фрагмент вообще не отображался, когда я объявил его в файле layout.xml:

<fragment class="com.example.MyListFragment"
    android:id="@+id/frag_list"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:visibility="gone" />

Затем, после того, как данные были загружены и обработаны, я бы затем отобразил фрагмент с использованием FragmentTransaction:

FragmentManager fm = getFragmentManager();
Fragment frag = fm.findFragmentById(R.id.frag_list);
FragmentTransaction ft = fm.beginTransaction();
ft.show(frag);
ft.commit();

Если есть более эффективный способ решения этой проблемы, я 'Я открыт для предложений.

0 голосов
/ 12 июля 2013
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    adapter.swapCursor(cursor);
    if(isResumed()) {
        setListShown(true);
    } else {
        setListShownNoAnimation(true);
    }
}

Но вы должны setListShown(false), где вы установили ListAdapter. Это отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...