Подтвердить что ты не робот

Android ListView: текст по умолчанию, когда нет элементов

У меня есть ListView, который может содержать 0 пользовательских элементов внутри (например, "Мои загрузки" ).

Есть ли в любом случае, чтобы показать текст по умолчанию "Нет загрузки еще"?

Спасибо!

EDIT: вот мое решение,

TextView emptyView = new TextView(getApplicationContext());
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
emptyView.setTextColor(R.color.black);
emptyView.setText(R.string.no_purchased_item);
emptyView.setTextSize(20);
emptyView.setVisibility(View.GONE);
emptyView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

((ViewGroup)getListView().getParent()).addView(emptyView);
getListView().setEmptyView(emptyView);

alt text

4b9b3361

Ответ 1

public void setEmptyView (View emptyView)

Since: API Level 1
Sets the view to show if the adapter is empty

Вызывается в экземпляре ListView.

например. mListView.setEmptyView(someView);

Вы можете построить представление на лету или раздуть его из xml.

Ответ 2

Если я неправильно прочитал ваш вопрос, вы также можете просто указать любой элемент вида с идентификатором "@android: id/empty" в вашем макете, и он будет автоматически заботиться о вас. Например:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:visibility="visible"/>

<LinearLayout android:id="@android:id/empty"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:gravity="center">

    <TextView android:text="@string/no_messages"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        style="@style/textBoldLight">
    </TextView>

</LinearLayout>

Ответ 3

В другом подходе BaseAdapter есть метод isEnabled(). Вам необходимо создать собственный адаптер, который будет возвращать для определенных элементов isEnabled (int position) как false. В этом случае эти элементы будут недоступны. Легко изменить его таким образом, что когда список пуст, просто добавьте один отключенный элемент.

Но наверняка метод, описанный выше Алексом Орловым, лучше

Ответ 4

Если вы используете Activity вместо ListActivity и хотите установить гравитацию пустого центра (как по горизонтали, так и по вертикали), вы должны использовать их:

В вашем макете:

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

    <ListView
        android:id="@+id/contacts"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <LinearLayout
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/no_contacts_add_one">
        </TextView>

    </LinearLayout>


</LinearLayout> 

В вашей деятельности:

ListView contacts = (ListView) view.findViewById(R.id.contacts);
contacts.setEmptyView(view.findViewById(android.R.id.empty));