Отображение пустого представления, когда ListView пуст
почему-то пустой взгляд, TextView в этом случае всегда появляется, даже когда ListView - это не пустые. Я думал, что ListView автоматически определит, когда показывать пустой вид.
<RelativeLayout android:id="@+id/LinearLayoutAR"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<ListView android:id="@+id/ARListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></ListView>
<ProgressBar android:id="@+id/arProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"></ProgressBar>
<!-- Here is the view to show if the list is emtpy -->
<TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No Results" />
</RelativeLayout>
Как я могу подключить пустой взгляд правильно?
10 ответов:
Это должно быть так:
<TextView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:text="No Results" />
Примечание id
Как говорит appsthatmatter, в макете что-то вроде:
<ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/emptyElement" ... />
и в связанном деятельности:
this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.emptyElement));
также работает с GridView...
Я пробовал все вышеперечисленные решения.Я придумал решение проблемы.Здесь я публикую полное решение.
The xml-файл:
<RelativeLayout android:id="@+id/header_main_page_clist1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:paddingBottom="10dp" android:background="#ffffff" > <ListView android:id="@+id/lv_msglist" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@color/divider_color" android:dividerHeight="1dp" /> <TextView android:id="@+id/emptyElement" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="NO MESSAGES AVAILABLE!" android:textColor="#525252" android:textSize="19.0sp" android:visibility="gone" /> </RelativeLayout>
textView ( "@ + id / emptyElement") является заполнителем для пустого listview.
вот код для страницы java:
lvmessage=(ListView)findViewById(R.id.lv_msglist); lvmessage.setAdapter(adapter); lvmessage.setEmptyView(findViewById(R.id.emptyElement));
Не забудьте поставить emptyView после привязки адаптер для элемента управления ListView.Мой не работал в первый раз, и после того, как я переместил setEmptyView после setAdapter он теперь работает.
выход:
Я настоятельно рекомендую вам использовать ViewStubs, как это
<FrameLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ViewStub android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout="@layout/empty" /> </FrameLayout>
Смотрите полный пример из Кирилл Мотье
<ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/empty" ... /> and in the linked Activity: this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.empty));
это работает четко с FragmentActivity, если вы используете библиотеку поддержки. Проверено это путем построения для API 17 т. е. 4.2.2 изображения.
код активности, его важно расширить
ListActivity
.package com.example.mylistactivity; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import com.example.mylistactivity.R; // It's important to extend ListActivity rather than Activity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylist); // shows list view String[] values = new String[] { "foo", "bar" }; // shows empty view values = new String[] { }; setListAdapter(new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, android.R.id.text1, values)); } }
макет xml, идентификатор в обоих представлениях важны.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- the android:id is important --> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <!-- the android:id is important --> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="i am empty"/> </LinearLayout>
просто добавить, что вы действительно не нужно создавать новые идентификаторы, что-то вроде следующего будет работать.
в макете:
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/list"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/empty" android:text="Empty"/>
затем в работе:
ListView listView = (ListView) findViewById(android.R.id.list); listView.setEmptyView(findViewById(android.R.id.empty));