setEmptyView () с использованием раздутого представления не работает

#android

#Android

Вопрос:

у меня есть TabHost с 3 вкладками, каждая из которых содержит список, к которому я хочу прикрепить пустое представление, отображаемое, когда элементов не существует. Макет выглядит следующим образом:

 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:padding="5dp">
        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:padding="5dp">
            <LinearLayout android:layout_height="fill_parent"
                android:layout_width="fill_parent">
                <ListView android:id="@ id/tab_all_list"
                    android:layout_width="fill_parent" android:layout_height="fill_parent"></ListView>
                <ListView android:id="@ id/tab_call_list"
                    android:layout_width="fill_parent" android:layout_height="fill_parent">
                </ListView>
                <ListView android:id="@ id/tab_sms_list"
                    android:layout_width="fill_parent" android:layout_height="fill_parent">
                </ListView>
                <LinearLayout android:orientation="vertical"
                    android:id="@ id/empty_list_view" android:layout_width="fill_parent"
                    android:layout_height="fill_parent" android:visibility="gone"
                    android:gravity="center">
                    <ImageView android:layout_width="wrap_content"
                        android:layout_height="wrap_content" android:background="@drawable/location_waternark"></ImageView>
                    <TextView android:text="@string/empty_action_list_text"
                        android:layout_width="wrap_content" android:layout_height="wrap_content">
                    </TextView>
                </LinearLayout>
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>
  

И в коде я устанавливаю пустое представление следующим образом для каждого ListView (показано один раз для краткости):

 ListView listView = (ListView) findViewById(R.id.tab_all_list);
listView.setEmptyView(findViewById(R.id.empty_list_view));
  

Тем не менее, пустой вид не отображается, когда адаптер, подключенный к списку, не содержит элементов.
Имеет ли это какое-либо отношение к иерархиям представлений или чему-то еще?

Ответ №1:

Используйте android:id/empty идентификатор для представления любого типа, как описано здесь .

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

1. Я забыл упомянуть — я не использую ListActivity, потому что на самом деле это TabActivity, который содержит 3 ListViews — 1 для каждой вкладки. Является ли проблема с android: id / empty все еще актуальной в таком случае?

Ответ №2:

Кажется, что установка идентификатора пустого представления на:

 android:id="@id/android:empty"
  

решаемая проблема!

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

1. Согласно документам, вы должны иметь возможность удалить вызов setEmptyView () теперь, когда вы установили идентификатор представления в «@id / android: empty»

2. @mharper: вероятно, нет, поскольку он не использует ListViewActivity