ListFragment — загружает пустой список TextView. . . в итоге

Я использую ListFragment для отображения ListView. Проблема в том, что TextView, который должен отображаться, когда список пуст, не отображается сразу. Он начинается с черного экрана, а затем в конечном итоге загружает либо заполненный список, либо пустой TextView (в зависимости от того, что наступит раньше).

Я понимаю, что ListFragment не устанавливает пустой TextView автоматически, как ListActivity, поэтому я добавил пустой TextView вручную с помощью следующего кода:

ListView list = (ListView) getActivity().findViewById(android.R.id.list);
TextView emptyText = (TextView) getActivity().findViewById(android.R.id.empty);
list.setEmptyView(emptyText);

Я хотел бы, чтобы пустой вид отображался немедленно, а затем заменялся ListView, если и когда он заполнялся.


person Rarw    schedule 06.03.2013    source источник
comment
Фрагмент списка автоматически устанавливает пустое представление... Вам просто нужно вызвать setEmptyText(он пуст!); указать текст   -  person dymmeh    schedule 07.03.2013
comment
Вы должны использовать ListFragment#setEmptyText()   -  person A--C    schedule 07.03.2013
comment
Это не работает - использование setEmptyText() дает мне IllegalStateException: нельзя использовать с пользовательским представлением контента. Это происходит, даже если я удаляю пустое представление txt из XML и удаляю приведенный выше код.   -  person Rarw    schedule 07.03.2013
comment
Помещение ‹include layout=@android:layout/list_content /› в ваш XML будет включать список и пустой TextView в ваш макет с соответствующими идентификаторами. Затем удалите список/текстовое представление, которое вы создали ранее, и сохраните свои пользовательские элементы макета. Просто установите для него ширину и высоту (я не хотел искажать комментарии с ним)   -  person dymmeh    schedule 07.03.2013
comment
Та же ошибка, что и раньше: я добавил ваше предложение в XML для фрагмента списка, с представлением списка и пустым текстовым представлением, и удалил приведенный выше код. Я получаю ту же ошибку с setEmptyText.   -  person Rarw    schedule 07.03.2013
comment
Одно предложение: вы не можете использовать представление действий внутри своего фрагмента. Вы не должны использовать getActivity().findViewById()   -  person tasomaniac    schedule 15.08.2013


Ответы (1)


Оказывается, проблема была связана с тем, что я использовал SupportMapFragment в ViewPager. После очень медленного перемещения представлений назад и вперед я смог увидеть, что список отображается под чем-то вроде черного экрана. После некоторого копания в StackOverflow, когда приведенные выше комментарии не устраняли проблему, я нашел этот пост. По-видимому, использование MapFragment в пейджере просмотра приводит к тому, что черный ящик появляется поверх других Fragment в ViewPager.

Я не могу сказать, почему через некоторое время черный артефакт исчезнет и заменится пустым списком или заполненным ListView. Однако мне удалось решить проблему, поместив вид поверх карты с прозрачным фоном, как это было предложено в сообщении выше. Как только черный артефакт был удален, я сразу увидел пустой список.

person Rarw    schedule 07.03.2013