Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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_Android Layout - Fatal编程技术网

Android 动态树形图

Android 动态树形图,android,android-layout,Android,Android Layout,我已经尝试创建这个逻辑两天了,尽管在纸上看起来是一个相对简单的问题,但在有效地编写代码时,有很多情况会把这个问题搞砸 查询web服务后,我收到以下类型的响应: 我需要根据答案动态创建布局以模拟此行为: 有一个包含所有根项目的主微调器。如果我选择一项,则有两种选择。如果它没有任何子对象,我只添加一个textview。否则,我会添加一个新的微调器,该微调器将子对象作为选项,如果选择了子对象,则会在下方创建一个新的textview。这是递归的 我成功地实现了这一点,它只在两个级别上工作(json没

我已经尝试创建这个逻辑两天了,尽管在纸上看起来是一个相对简单的问题,但在有效地编写代码时,有很多情况会把这个问题搞砸

查询web服务后,我收到以下类型的响应:

我需要根据答案动态创建布局以模拟此行为:

有一个包含所有根项目的主
微调器。如果我选择一项,则有两种选择。如果它没有任何子对象,我只添加一个textview。否则,我会添加一个新的微调器,该微调器将子对象作为选项,如果选择了子对象,则会在下方创建一个新的textview。这是递归的


我成功地实现了这一点,它只在两个级别上工作(json没有id“5”元素)。我希望这是一个无限的水平工作。当我有一个三级树并且在中间节点上选择时,问题就会出现。我想隐藏他的编辑文本,但也要隐藏微调器和他孩子的编辑文本,我无法直接访问新编程创建的视图。

使用递归函数。如果子节点为空,则停止递归。所以,您对第一个项进行第一次调用,如果它没有子项,则转到下一步,如果它有子项,则再次调用此函数

删除视图取决于您选择的根元素。如果是
RecyclerView
,则只需更新集合并通知适配器/use
DiffUtil
回调。
如果动态添加视图,则只需在创建时设置视图id,并在更新时按id删除视图。

使用递归函数。如果子节点为空,则停止递归。所以,您对第一个项进行第一次调用,如果它没有子项,则转到下一步,如果它有子项,则再次调用此函数

删除视图取决于您选择的根元素。如果是
RecyclerView
,则只需更新集合并通知适配器/use
DiffUtil
回调。
如果动态添加视图,则只需在创建时设置视图id,并在更新时按id删除视图。

使用视图.generateWid()将id设置为动态创建的视图,如
urview.setId(view.generateWid())
,并根据需要,使用id删除它们。

使用
view.generateViewId()
将id设置为动态创建的视图,就像
urview.setId(view.generateViewId())
一样,并根据您的需要,使用id删除它们。

我正在动态添加视图,但您无法在视图上以编程方式设置id。我应该改为使用setTag吗?实际上可以使用setId()方法添加id setId()不起作用。它需要一个资源类型id。@ZackKaytranada你说得对。我的错。但是你可以试着通过设置Tag来实现,我正在动态添加视图,但是你不能通过编程在视图上设置id。我应该改为使用setTag吗?实际上可以使用setId()方法添加id setId()不起作用。它需要一个资源类型id。@ZackKaytranada你说得对。我的错。但是你可以试着通过设置标签来实现