Android 指定的子级已具有父级。必须首先对子级的父级调用removeView()。使用芯片和芯片组

Android 指定的子级已具有父级。必须首先对子级的父级调用removeView()。使用芯片和芯片组,android,Android,所以我在布局中定义了一个芯片组,我想在其中添加多个芯片。我为通用芯片创建了一个单独的实体,如下所示: single_chip.xml 因此,在我的代码中,当我想在组中添加芯片时,我非常喜欢: View view = getLayoutInflater().inflate(R.layout.single_chip, null); Chip chip = view.findViewById(R.id.chip); for (Map.Entry<String, String> en

所以我在布局中定义了一个芯片组,我想在其中添加多个芯片。我为通用芯片创建了一个单独的实体,如下所示:

single_chip.xml

因此,在我的代码中,当我想在组中添加芯片时,我非常喜欢:

 View view = getLayoutInflater().inflate(R.layout.single_chip, null);
 Chip chip = view.findViewById(R.id.chip);

 for (Map.Entry<String, String> entry : selectedFilterMap.entrySet()) {
            chip.setText(entry.getValue());
            chipGroup.addView(chip);
            chipGroup.setVisibility(View.VISIBLE);
           }
但是在添加第一个芯片后,上面的代码被多次调用,我得到这个错误:

指定的子级已具有父级。您必须调用removeView 首先是孩子的父母


我应该在哪里调用removeView?我试图在for之前或for之后添加它,但出现了相同的错误。

您需要在for循环之前添加它。像这样

 for (Map.Entry<String, String> entry : selectedFilterMap.entrySet()) {
 View view = getLayoutInflater().inflate(R.layout.single_chip, null);
 Chip chip = view.findViewById(R.id.chip);
                chip.setText(entry.getValue());
                chipGroup.addView(chip);
                chipGroup.setVisibility(View.VISIBLE);
               }

@anMC我已经修改了答案。因为你每次都在创建一个对象并设置内容。可能是因为你。这似乎是问题所在,我不知道为什么我没有考虑它。
 for (Map.Entry<String, String> entry : selectedFilterMap.entrySet()) {
 View view = getLayoutInflater().inflate(R.layout.single_chip, null);
 Chip chip = view.findViewById(R.id.chip);
                chip.setText(entry.getValue());
                chipGroup.addView(chip);
                chipGroup.setVisibility(View.VISIBLE);
               }