Android 在选项卡视图中显示递归列表
这里是算法问题 我正在创建一个显示法律文档的应用程序,带有导航选项卡(TOC、书签等)。 在TOC选项卡中,我需要显示一个多级目录。在toc的“叶子”处,我需要显示一个文本视图 因此,我可以: 表1:列表->列表->列表->列表->列表->文本视图 或 表1:列表->列表->列表->文本视图 或 表1:列表->文本视图 这取决于我所展示的书的章节、小节、子章节结构 现在,无论你有多深,TabHost都需要始终存在,以提供主导航。(是的,我问,我需要使用标签,而不是菜单。) 问题是: 如何在选项卡的FrameLayout中实现递归列表?或者我应该使用标签样式的ListView,而不使用TabHost 想法 谢谢Android 在选项卡视图中显示递归列表,android,list,android-tabhost,tabview,Android,List,Android Tabhost,Tabview,这里是算法问题 我正在创建一个显示法律文档的应用程序,带有导航选项卡(TOC、书签等)。 在TOC选项卡中,我需要显示一个多级目录。在toc的“叶子”处,我需要显示一个文本视图 因此,我可以: 表1:列表->列表->列表->列表->列表->文本视图 或 表1:列表->列表->列表->文本视图 或 表1:列表->文本视图 这取决于我所展示的书的章节、小节、子章节结构 现在,无论你有多深,TabHost都需要始终存在,以提供主导航。(是的,我问,我需要使用标签,而不是菜单。) 问题是: 如何在选项卡
好的。第一,您不能将
列表视图
放入列表视图
、滚动视图
、网格视图
或任何可滚动的内容(即列表视图
项不能是列表视图
)。它可能会编译,也可能会运行,但结果并不是您所期望的。这是因为ListView
的高度不能设置为WRAP\u CONTENT
您可以有一个两级列表(ExpandableListView
),但如果您需要更多的级别,则必须通过扩展ListView
或ExpandableListView
来自行实现该功能
您还可以拥有分段列表和具有多种项目类型的列表,但无法使用默认SDK组件获得5级列表
第二:是的,您可以在TabHost
中拥有ListView
。您将无法使用ListActivity
,但这只意味着您必须直接调用ListView
方法:
ListView myList = findViewById(R.id.myList);
myList.setAdapter(myListAdapter);
而不是调用内置的ListActivity
方法
只需将您的列表视图
放在布局文件的框架布局
中即可。如果您有三个选项卡,并且列表视图
是框架布局
中的第一个元素,则它将显示为第一个选项卡的内容。如果它是第二个元素,它将是第二个选项卡的内容,依此类推
实现具有内置组件的递归列表的唯一方法是使用单个
列表视图
,然后在用户选择项目时更改列表视图
适配器的内容(基本上是使用单个列表视图的向下钻取菜单)。您还需要用on backpressed按住后退按钮,以允许用户浏览列表,或在某个位置提供后退按钮。Joseph,谢谢您的回答。这正是我想要的:没有简单的解决方案。适配器正在更改的ListView听起来与我想要的最接近,但适配器看起来会很可怕。谢谢--不一定。例如,在一个简单的例子中,如果您有一个顶级菜单和4个二级菜单,那么您只需要一个ArrayAdapter、一个列表和5个字符串[]s(包含顶级菜单和4个子菜单)以及一个整数来记住当前级别。只需调用List.clear(),然后使用其中一个数据集调用List.addAll(字符串[]),然后调用ArrayAdapter.notifyDatasetChanged(),列表内容就会更改。在列表上使用onClick Listener,并在onClick方法中确定这是否是item leads to submenu(在这种情况下加载所需的数据集)(执行item操作)。事实上,您可以创建一个ArrayAdapter,其中MyObject类似于类MyObject{public String itemName;public list childItems;}
。然后,当单击一个项目时,测试是否((MyObject)ListView.getItemAtPosition(position)).childItems==null
。如果没有,则将childItems
设置为新的适配器内容。这样,您只需要跟踪一个父列表,但首先需要以某种方式进行设置。还有一条注释:要执行“叶”,这将是一种不同类型的视图(例如,具有两个文本视图的线性布局),我可以在FrameLayout中同时使用ListView和此视图,并调用setVisibility(Visibility.GONE)为了我不需要的那个。听起来这样做是可行的…:)顺便说一句,我真的很感谢你花时间帮我思考这个问题。你很酷!