@android:id /empty показывает пустое представление, но не показывает ListView, когда данные существуют в ListFragment

#android #android-layout #android-fragments #android-listview

#Android #android-макет #android-фрагменты #android-listview

Вопрос:

У меня есть ListFragment со следующим макетом

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:drawSelectorOnTop="false" >
    </ListView>

    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="No data" />

</LinearLayout>
  

Когда ListFragment изначально создается, в нем нет данных, и все в порядке. Текстовое представление «нет данных» отображается, как и ожидалось.

Но когда я добавляю содержимое / данные, ListFragment остается в представлении «Нет данных» и не переключается на отображение строк. Если я выну @android:id / пустую часть XML, я смогу видеть строки в полном порядке. Это означает, что это не проблема ввода данных, а проблема, связанная с фактическим файлом XML (я верю).

Есть ли какой-нибудь способ исправить это?

Обновление: вызов notifyDataSetChanged() при добавлении в список разрешил эту проблему!

Комментарии:

1. Вы проверили, что ваш адаптер возвращает 0 в getCount()?

Ответ №1:

Что, если вы добавите этот код к фрагменту, где вы устанавливаете адаптер в listview? list.setEmptyView(findViewById(android.R.id.empty)) ?

Комментарии:

1. что list в этом сценарии?

2. Я пропустил, что вы использовали ListFragment, который должен обрабатывать пустое представление, но в этом случае это будет getListView() внутри фрагмента.

3. Если это ничего не дает, возможно, вы забыли вызвать notifyDataSetChanged() при добавлении новых данных?

4. Вызов notifyDataSetChanged() исправил эту проблему! Спасибо! 🙂