Хорошо. Номер один, вы не можете поместить ListViews
внутрь ListViews
, ScrollViews
, GridViews
или что-либо прокручиваемое в этом отношении (то есть элемент ListView
не может быть ListView
). Он может скомпилироваться, он может работать, но результаты будут не такими, как вы ожидаете или хотите. Это связано с тем, что ListView
не может иметь высоту, установленную на WRAP_CONTENT
.
Вы можете иметь двухуровневый список (ExpandableListView
), но если вам требуется больше уровней, чем вам, вам придется реализовать функциональность самостоятельно, расширив ListView
или ExpandableListView
.
Вы также можете иметь секционированные списки и списки с несколькими типами элементов, но невозможно использовать компоненты SDK по умолчанию для получения 5-уровневого списка.
Номер два: Да, вы можете иметь ListView
внутри TabHost
. Вы не сможете использовать ListActivity
, но это означает, что вам придется напрямую вызывать методы ListView
:
ListView myList = findViewById(R.id.myList);
myList.setAdapter(myListAdapter);
вместо вызова встроенных ListActivity
методов.
Просто поместите ваш ListView
внутри FrameLayout
в вашем файле макета. Если у вас есть три вкладки и ListView
является первым элементом внутри FrameLayout
, то он будет отображаться как содержимое для первой вкладки. Если это второй элемент, это будет содержимое для второй вкладки и т. Д.
Единственный способ реализовать рекурсивный список со встроенными компонентами - это использовать один ListView
, а затем изменять содержимое адаптера ListView
, когда пользователь выбирает элемент (по сути, детализация). меню с использованием одного ListView). Вам также нужно поймать кнопку «Назад» с помощью onBackPressed
, чтобы пользователь мог вернуться назад по списку или где-нибудь предоставить кнопку «Назад».