Android: установить пустой вид в список

 <TextView
            android:id="@android:id/empty"
            style="@style/FacebookFont"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/no_result_found"
            android:textColor="@color/white" />

это xml-код для пустого представления. Я устанавливаю пустой вид следующим образом:

    list.setAdapter(adapter);
    list.setEmptyView(findViewById(android.R.id.empty));

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

Пожалуйста, помогите.

Ответ 1

если вы используете ListActivity, тогда не нужно устанавливать пустой вид вручную. Удалите list.setEmptyView(findViewById(android.R.id.empty)); из вашего кода.

Измените свой макет, как показано ниже, затем автоматически добавьте EmptyView, если в списке нет элемента:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="8dp"
        android:paddingRight="8dp">

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

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

</LinearLayout>

Ответ 2

Вы должны установить пустой вид перед настройкой адаптера, если ваш MainActivity не расширяет ListActivity.

Попробуйте это

list.setEmptyView(findViewById(android.R.id.empty));
list.setAdapter(adapter);

Извините за поздний ответ!

Альтернативный метод: Сделайте вашу деятельность расширенной из ListActivity. И добавьте textview в список раскладки с id android.R.id.empty

Ответ 3

Попробуйте это

    View view = getLayoutInflater() .inflate(<resource id of the empty view>, null);
    ViewGroup viewGroup= ( ViewGroup)list.getParent();
    viewGroup.addView(view);
    list.setEmptyView(view); 
    list.setAdapter(adapter);

Ответ 4

Есть несколько правильных ответов, однако, я думаю, что это лучший подход, который я нашел:

View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null);
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView
listView.setEmptyView(emptyView);
listView.setAdapter(adapter);

Ответ 5

Независимо от того, что объяснил @dhawalSodhaParmar, это правильно. Но есть путаница, когда вы смотрите на то, как ответ подавляется.

    <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SampleActivity">

    <ListView
        android:id="@+id/list"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:divider="@null"
        android:dividerHeight="0dp" />

    <!-- Empty view is only visible when the list has no items. -->
    <TextView
        android:id="@+id/empty_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="NO DOCUMENTS AVAILABLE!"
        android:textColor="#525252"
        android:textAppearance="?android:textAppearanceMedium"
        android:visibility="gone"/>

</RelativeLayout>

Предположим, что у вас уже есть вид списка и адаптер, поддерживающий то же самое с данными. И если все работает нормально, кто хочет реализовать этот пустой экран просмотра списка, должен начинаться следующим образом: Шаг 1: Измените существующий XML файл Activity, который имеет вид списка с тем, который я использовал здесь. Вы можете использовать либо линейную компоновку, либо относительную компоновку, но предпочтительно относительную из-за гибкости. И textView, как я написал.

Шаг 2: Перейдите в свой файл Java активности и после вашего setContentView

ListView emptyListView = (ListView) findViewById(R.id.list);
// set your adapter here
// set your click listener here
// or whatever else
emptyListView.setEmptyView(findViewById(R.id.empty_text_view));

Чтобы он теперь запускался, и вы настроены!