getText() 总是 return 来自动态创建的 Chip 组件的空字符串?

getText() always return empty string from dynamically created Chip component?

我正在尝试根据一些计算的字符串数组列表动态创建一些选择芯片组件,以下是创建芯片并将它们添加到布局 XML 文件中创建的芯片组的代码。

        if (mChipGroup.getChildCount() == 0 ){
            int i = 0;
            for (Classifier.Recognition res: results){
                Chip resultChip = new Chip(getDialog().getContext());
                ChipDrawable chipDrawable =
                        ChipDrawable.createFromAttributes(
                                getActivity(),
                                null,
                                0,
                                R.style.Widget_MaterialComponents_Chip_Choice);
                resultChip.setId(i++);
                resultChip.setChipDrawable(chipDrawable);
                resultChip.setText(res.getTitle());
                mChipGroup.addView(resultChip);
            }
        }

筹码与文本正确显示,但当我尝试调用筹码上的 getText() 时,它总是 return 空字符串,而不是筹码包含的文本。我通过在 ChipGroup 上设置 OnCheckedChangeListener 并用文本制作 Toast 来测试它(尽管它没有;不起作用)。当我试图只显示 checkedId 时它起作用了。


        mChipGroup.setOnCheckedChangeListener(new ChipGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(ChipGroup group, int checkedId) {
                Chip chip = group.findViewById(checkedId);
                if(chip != null){
                    Toast.makeText(getContext(), chip.getText().toString(),Toast.LENGTH_SHORT).show();
                }
            }
        });

我目前的解决方法是使用一个变量保存数组结果并使用 ArrayList.get(selectedChipId.getTitle())。但不要认为它应该是那样的

我还发现它可以从布局文件中添加的 Chips 中获取文本,但不能从 运行-time 添加的 Chips 中获取文本。尝试使用 1.1.0/alpha06 和 1.1.0/alpha07 版本,但没有成功。如果可能的话,想得到一些建议。非常感谢你。

因此,根据 here and here 中的回答,这似乎是一个错误。当前的解决方法是改用 ((ChipDrawable) chip.getChipDrawable()).getText()