Intereting Posts
Сфотографировать с android ndk – камера api Внешнее распределение слишком велико для этого процесса в Android Сбой сборки при запуске-андроиде из-за зависимостей Стоимость повышения намерения в андроиде Как запустить активность только один раз, когда приложение открывается в первый раз? Плохое качество изображения после изменения размера / масштабирования растрового изображения Как согласовать или объединить два или более видеофайлов в Android? Изображения, сделанные с помощью ACTION_IMAGE_CAPTURE, всегда возвращают 1 для ExifInterface.TAG_ORIENTATION на некоторых более новых устройствах Как использовать ThreeTenABP в Android-проекте NoClassDefFoundError – Eclipse и Android Какое мобильное кросс-платформенное решение на основе Ruby? Использование in-memory sqlite android Renderscript через библиотеку поддержки Воспроизведение фрагмента backstack без воспроизведения Pop-Animation Android M Camera Intent + ошибка разрешения?

Отобразить сообщение «Нет товара» в ListView

Я создал некоторые пользовательские интерфейсы в моих приложениях для Android, и есть некоторые элементы управления ListView – помимо других элементов управления – внутри представления. Из-за этого я использовал «Активность» в качестве базового класса активности.

Теперь мне нужно отобразить простое сообщение типа «Нет элемента», когда ListView, привязанный к моему адаптеру, пуст. Я знаю, что это возможно при использовании ListActivity, но я не уверен, что это лучший подход для этого?

Solutions Collecting From Web of "Отобразить сообщение «Нет товара» в ListView"

Вы ищете пустой вид ListActivity:

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

Если вы используете ListView, вы можете использовать метод setEmptyView ():

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

Вы можете иметь пустой вид без ListActivity ! Правильный метод выглядит следующим образом

Сначала добавьте «пустой вид» в свой макет XML под своим списком

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

Затем переопределите метод onContentChanged вашей активности и установите пустой вид вашего списка на пустой вид:

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

Это оно! При обновлении адаптера Android позаботится о скрытии / показе списка и пустом представлении.

Магия

Решение о том, отображается ли пустое представление или нет, обрабатывается суперклассом ListView , AdapterView . AdapterView регистрирует DataSetObserver на установленном адаптере, поэтому он уведомляется при каждом изменении данных. Это вызывает вызов checkFocus в AdapterView который содержит следующие строки

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

И устанавливает видимость пустого представления в зависимости от того, пуст или нет адаптер.

Просто соедините ListView с TextView :

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

Затем проверьте количество элементов, видимых на экране, в списке ListView :

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

Если вы используете Custom Adapter, вы можете сделать это в переопределенном методе notifyDataSetChanged .

Вы можете использовать Toast Message для этого.

Проверьте значение Count of Adapter adapter.getCount()

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

Для кода макета Джозефа вам нужно отредактировать @ + id / list и @ + id / empty для @android: id / * , например:

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

Таким образом, вам даже не нужно переопределять функцию onContentChanged ().

Самый простой способ добиться этого – использовать ListFragment вместо ListActivity. ListFragment имеет следующий удобный метод:

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

Кроме того, использование класса ListFragment имеет другие преимущества. Например, возможность объединить его с новой библиотекой AppCompat (которую вы не можете сделать с ListActivity, потому что вам нужно перейти от ActionBarActivity).