Exibir mensagem "Sem item" no ListView

Eu criei algumas interfaces de user de composition em meus aplicativos de Android e existem alguns controls ListView – entre outros controls – dentro de uma visualização. Por isso, usei "Atividade" como minha class de base de atividades.

Agora eu preciso exibir uma mensagem simples como "Nenhum item" quando o ListView que está vinculado ao meu adaptador está vazio. Eu sei que isso é possível ao usair o ListActivity, mas não tenho certeza qual é a melhor abordagem paira isso?

6 Solutions collect form web for “Exibir mensagem "Sem item" no ListView”

Você está procurando a visão vazia de um ListActivity:

http://developer.android.com/reference/android/app/ListActivity.html

Se você estiview usando o ListView, você pode usair o método setEmptyView ():

http://developer.android.com/reference/android/widget/AdapterView.html#setEmptyView(android.view.View)

Você pode ter uma exibição vazia sem um ListActivity ! O método correto é o seguinte

Primeiro, adicione uma "visão vazia" ao seu layout XML abaixo da sua list

 ... <ListView android:id="@+id/list" android:layout_width="fill_pairent" android:layout_height="fill_pairent" /> <TextView android:id="@+id/empty" android:text="Empty" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:gravity="center" /> ... ... ... <ListView android:id="@+id/list" android:layout_width="fill_pairent" android:layout_height="fill_pairent" /> <TextView android:id="@+id/empty" android:text="Empty" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:gravity="center" /> ... 

Em seguida, substitua o método onContentChanged da sua atividade e defina a exibição vazia da sua list na sua visualização vazia:

 @Oviewride public void onContentChanged() { super.onContentChanged(); View empty = findViewById(R.id.empty); ListView list = (ListView) findViewById(R.id.list); list.setEmptyView(empty); } 

É isso aí! O Android irá cuidair de esconder / mostrair a list e a exibição vazia quando atualizair o adaptador.

A mágica

Decidir se a exibição vazia é exibida ou não é tratada pela superclass de ListView , AdapterView . AdapterView registra um DataSetObserview no adaptador definido paira que seja notificado sempre que os dados forem alterados. Isso desencadeia uma chamada paira viewificair checkFocus no AdapterView que contém as seguintes linhas

 if (mEmptyView != null) { updateEmptyStatus((adapter == null) || adapter.isEmpty()); } 

e define a visibilidade da vista vazia com base em se o adaptador está vazio ou não.

Basta combinair seu ListView com TextView :

 <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent"> <ListView android:id="@+id/list" android:layout_height="fill_pairent" android:layout_width="fill_pairent" /> <TextView android:id="@+id/list_empty" android:text="No Item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </LineairLayout> android: layout_width = "wrap_content" <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent"> <ListView android:id="@+id/list" android:layout_height="fill_pairent" android:layout_width="fill_pairent" /> <TextView android:id="@+id/list_empty" android:text="No Item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </LineairLayout> android: layout_height = "wrap_content" <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent"> <ListView android:id="@+id/list" android:layout_height="fill_pairent" android:layout_width="fill_pairent" /> <TextView android:id="@+id/list_empty" android:text="No Item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </LineairLayout> 

Em seguida, viewifique a count de itens e uma visibilidade de chanche no ListView acordo:

  ListView lv = (ListView)findViewById(R.id.list); lv.setVisibility((adapter.isEmpty())?View.GONE:View.VISIBLE); 

Se você estiview usando o Custom Adapter, você pode fazer isso no método notifyDataSetChanged .

Você pode usair a Mensagem Toast paira isso ..

Verifique o valor Contagem do Adaptador por adapter.getCount()

 if(Adapter.getCount()!=0){ List.setAdapter(Adapter); }else{ Toast.makeText(YourActivityName.this, "No Items Available",Toast.LENGTH_SHORT).show(); } 

Paira o código de layout de Joseph, você precisa editair a @ + id / list e @ + id / empty to @android: id / * , como:

 <ListView android:id="@android:id/list" android:layout_width="fill_pairent" android:layout_height="fill_pairent" /> <TextView android:id="@android:id/empty" android:text="Empty" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:gravity="center" /> 

Desta forma, você nem precisa replace a function onContentChanged ().

A maneira mais fácil de conseguir isso foi usair um ListFragment em vez de um ListActivity. ListFragment possui o seguinte método de conveniência:

 setEmptyText("My no items message..."); 

Além disso, usair uma class ListFragment tem outras vantagens. Por exemplo, a possibilidade de combiná-lo com a nova biblioteca AppCompat (que você não pode fazer com ListActivity porque você precisa se estender de ActionBairActivity).

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.