0

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

        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() 时,它总是返回空字符串,而不是芯片包含的文本。我通过在 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()). 但不要认为它应该是那样的

我还发现它能够从布局文件中添加的芯片中获取文本,但不能从运行时添加的芯片中获取文本。尝试了 1.1.0/alpha06 和 1.1.0/alpha07 版本,但没有运气。如果可能的话,想得到一些建议。非常感谢你。

4

1 回答 1

0

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

于 2019-06-13T14:13:40.763 回答