Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在选项卡视图中显示递归列表_Android_List_Android Tabhost_Tabview - Fatal编程技术网

Android 在选项卡视图中显示递归列表

Android 在选项卡视图中显示递归列表,android,list,android-tabhost,tabview,Android,List,Android Tabhost,Tabview,这里是算法问题 我正在创建一个显示法律文档的应用程序,带有导航选项卡(TOC、书签等)。 在TOC选项卡中,我需要显示一个多级目录。在toc的“叶子”处,我需要显示一个文本视图 因此,我可以: 表1:列表->列表->列表->列表->列表->文本视图 或 表1:列表->列表->列表->文本视图 或 表1:列表->文本视图 这取决于我所展示的书的章节、小节、子章节结构 现在,无论你有多深,TabHost都需要始终存在,以提供主导航。(是的,我问,我需要使用标签,而不是菜单。) 问题是: 如何在选项卡

这里是算法问题

我正在创建一个显示法律文档的应用程序,带有导航选项卡(TOC、书签等)。 在TOC选项卡中,我需要显示一个多级目录。在toc的“叶子”处,我需要显示一个文本视图

因此,我可以:

表1:列表->列表->列表->列表->列表->文本视图

表1:列表->列表->列表->文本视图

表1:列表->文本视图

这取决于我所展示的书的章节、小节、子章节结构

现在,无论你有多深,TabHost都需要始终存在,以提供主导航。(是的,我问,我需要使用标签,而不是菜单。)

问题是:

如何在选项卡的FrameLayout中实现递归列表?或者我应该使用标签样式的ListView,而不使用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)为了我不需要的那个。听起来这样做是可行的…:)顺便说一句,我真的很感谢你花时间帮我思考这个问题。你很酷!