Android 指定的子级已具有父级。必须首先对子级的父级调用removeView()。使用芯片和芯片组
所以我在布局中定义了一个芯片组,我想在其中添加多个芯片。我为通用芯片创建了一个单独的实体,如下所示: single_chip.xml 因此,在我的代码中,当我想在组中添加芯片时,我非常喜欢: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
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);
}