getText()总是从动态创建的Chip组件返回空字符串吗?

时间:2019-06-12 16:53:16

标签: java android material-design android-chips

我正在尝试通过一些计算基于String的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);
            }
        }

Chips正确显示了文本,但是当我尝试在芯片上调用getText()时,它总是返回空的String,而不返回芯片所包含的文本。我通过在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,但没有运气。如果可能的话,希望有一些建议。非常感谢你。

1 个答案:

答案 0 :(得分:0)

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