Отображение рекурсивных списков в представлении вкладок - PullRequest
0 голосов
/ 21 марта 2011

Алгоритм вопроса здесь.

Я создаю приложение, которое показывает юридический документ с вкладками для навигации (оглавление, закладки и т. Д.). Внутри вкладки TOC мне нужно показать многоуровневое оглавление. На «листе» ток нужно показать TextView

Итак, я мог бы иметь:

tab1: Список -> Список -> Список -> Список -> Список -> TextView

или

tab1: Список -> Список -> Список -> TextView

или

tab1: Список -> TextView

в зависимости от главы, раздела, подраздела, структуры подраздела книги, которую я показываю.

Теперь, не важно, насколько вы глубоки, TabHost должен ВСЕГДА НАСТОЯЩИМ, чтобы обеспечить основную навигацию. (Да, я спросил, и мне нужно использовать вкладки, а не меню.)

Вопрос:

Как реализовать рекурсивный список внутри FrameLayout вкладки? Или я должен использовать ListView в виде вкладок и просто не использовать TabHost?

Идеи

Спасибо!
llappall

1 Ответ

1 голос
/ 22 марта 2011

Хорошо. Номер один, вы не можете поместить 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, чтобы пользователь мог вернуться назад по списку или где-нибудь предоставить кнопку «Назад».

...