我一直试图创建这个逻辑2天,尽管在纸面上看起来像一个相对简单的问题,但是有很多情况会在有效编写代码的同时弄乱这个。
在查询Web服务后,我收到了这种类型的响应:
我需要动态创建一个布局,具体取决于模拟此行为的答案:
主spinner
包含所有根项。如果我选择一个项目,则有2个选项。如果它没有任何孩子,我只添加一个textview。否则,我添加一个将子项作为选项的新微调器,如果选择了子项,则会在下面创建一个新的文本视图。这是递归的。
我成功实现了这个功能,它只有 2个级别(json没有id'5'元素)。我希望这可以无限多个级别工作。当我有一个3级树并且我在中间节点上选择时,会出现问题。我想隐藏他的编辑文本,还有他孩子的微调器和编辑文本,我没有直接访问新编程创建的视图。
答案 0 :(得分:1)
使用递归函数。如果子节点为空,则停止递归。所以你先对第一个项目进行调用,如果没有孩子则进入下一个项目,如果有孩子则再次调用此函数。
删除视图取决于您选择的根元素。如果是RecyclerView
,那么只需更新集合并通知适配器/使用DiffUtil
回调。
如果您动态添加视图,则只需在创建时设置View
id,并在更新时按ID删除视图。
答案 1 :(得分:1)
使用View.generateViewId()
urview.setId(View.generateViewId())
将{id设置为动态创建的视图,并根据您的需要,使用ID删除它们。