setEmptyView в ListView не показывает его вид в приложении для Android?

У меня проблема с методом setEmptyView из ListView.

Вот мой код Java:

ListView view = (ListView)findViewById(R.id.listView1); view.setEmptyView(findViewById(R.layout.empty_list_item)); ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, MainController.getInstanz().getItems()); view.setAdapter(adapter1); 

empty_list_item:

    

Посмотреть список:

  

Что не так с моим кодом? Когда у меня есть элементы, я вижу их в списке. Но когда список пуст, я не вижу TextView .

Ваш TextView должен быть помещен прямо под элементом ListView с видимостью его видимости (android: visibility = “gone”), не размещайте его в другом макете. Так будет выглядеть ваш основной макет

       

И вот как выглядит ваш код

 ListView view = (ListView)findViewById(R.id.listViewFangbuch); view.setEmptyView(findViewById(R.id.empty_list_item)); ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, MainController.getInstanz().getItems()); view.setAdapter(adapter1); 

проблема в том, что я должен сделать addContentView:

 View empty = getLayoutInflater().inflate(R.layout.empty_list_item, null, false); addContentView(empty, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); view.setEmptyView(empty); 

теперь его штраф

Для меня ни один из этих ответов не работал для меня. Мне нужно было добавить пустой вид вручную (завышенный) в «родительский» вид Listview:

 ListView my_list = (ListView) findViewById(R.id.my_list); View emptyView = getLayoutInflater().inflate(R.layout.empty_view,null); ((ViewGroup)my_list.getParent()).addView(emptyView); listView.setEmptyView(emptyView); 

Самый простой способ использования setEmptyView() – с вашим «пустым» TextView и ListView в том же макете, что и в следующем:

     

Теперь вы можете использовать:

 view.setEmptyView(findViewById(R.id.empty_list_item)); 

Попробовав все представленные здесь решения и экспериментируя, я считаю, что приведенный ниже код – лучший метод для использования, когда ваш ListView и пустой View не являются бок о бок в макете с набором автоматических идентификаторов.

 ViewGroup parentGroup = (ViewGroup)getListView().getParent(); View empty = getActivity().getLayoutInflater().inflate(R.layout.list_empty_view, parentGroup, false); parentGroup.addView(empty); getListView().setEmptyView(empty); 

Обоснование:

  • Передавая родительскую группу в раздувание, атрибуты layout_ * вашего пустого макета видны
  • Не прикрепляя представление в inflate (ложный параметр), возвращается пустой вид. В противном случае, inflate вернет родителя, требуя от нас использовать parentGroup.findViewById (empty_view_id), чтобы получить пустой вид для использования с setEmptyView (). Здесь мы избегаем дополнительного поиска, необходимости в другом идентификаторе и необходимости раскрывать этот идентификатор в нашем коде. Если нам не нужно было сохранять ссылку на пустое место, то сказать, что надувание для прикрепления было бы правильным действием, устраняющим необходимость вызова addView.
  • Анти-шаблон, addContentView (), не является правильным подходом. Он будет выглядеть эквивалентно, пока ваш ListView занимает все видимое пространство вашей деятельности. Вместо того, чтобы ваш пустой вид являлся родным братом в ListView, он заканчивается тем, что является родным братом на других макетах корневого уровня в вашей деятельности. Он работает, потому что он плавает (z-порядок) поверх всех других видов в активности. См.: Activity.addContentView (View) == ViewGroup.addContentView (View)?

Ядром проблемы является то, что class AdapterView фактически не добавляет представление, которое вы передаете setEmptyView () в любой контейнер. Это просто меняет видимость. Есть много способов поместить объект «пустой вид» в контейнер, как описывают другие ответы.

Документация для AdapterView должна быть действительно обновлена, чтобы отразить это, поскольку это не очевидно.

Создайте макет в XML, который определяет как ListView и пустой вид, который вы хотите использовать. Если вы дадите им идентификаторы @android:id/list и @android:id/empty , андроид автоматически будет использовать представление с id:empty когда список пуст.

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

 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); 

также эти два метода помогли мне отобразить пустой вид:

  adapter.notifyDataSetChanged(); list.invalidateViews(); 

Просто используйте,

 View emptyView = getLayoutInflater().inflate(R.layout.empty_view, null); ((ViewGroup)listView.getParent()).addView(emptyView); 

Вместо listView.setEmptyView(emptyView);

Моя проблема заключалась в том, что я добавил нижний колонтитул, который, похоже, не работает с пустым представлением. После удаления нижнего колонтитула отображается пустой вид.

Я только что изучил android, но fragment из https://developer.android.com/guide/topics/ui/layout/listview.html изображает другой подход:

 // Create a progress bar to display while the list loads ProgressBar progressBar = new ProgressBar(this); progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); progressBar.setIndeterminate(true); getListView().setEmptyView(progressBar); // Must add the progress bar to the root of the layout ViewGroup root = (ViewGroup) findViewById(android.R.id.content); root.addView(progressBar); 

ViewGroup root = (ViewGroup) findViewById (android.R.id.content);

  • Показывать пустое представление, когда ListView пуст
  • Как реализовать ListView без ListActivity? (используйте только действие)
  • Как установить блок для Paint.setTextSize ()
  • динамически обновлять список с помощью адаптера
  • Как показать кнопку в конце Android ListView
  • OnItemCLickListener не работает в listview
  • Как обновить список просмотров Android?
  • Как сделать дополнительный просмотр float в UICollectionView в виде заголовков секций в обычном стиле UITableView
  • android: ViewPager и HorizontalScrollVIew
  • Как получить выбранный элемент в ListView?
  • Еще один getView вызвал несколько раз
  • Давайте будем гением компьютера.