getText () всегда возвращает пустую строку из динамически созданного компонента Chip? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь динамически создать некоторые выбранные компоненты микросхем на основе ArrayList of String из некоторых вычислений, и ниже приведен код для создания микросхем и добавления их в ChipGroup, созданную в 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 () для чипов, он всегда возвращает пустую строку, но не текст, содержащийся в чипах.Я проверил это, установив OnCheckedChangeListener в ChipGroup и сделав тост с текстом (хотя это не сработало).Когда я пытался отобразить только зарегистрированный идентификатор, он работает.


        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 голосов
/ 13 июня 2019

Итак, похоже на ошибку согласно здесь и здесь .Текущий обходной путь должен использовать ((ChipDrawable) chip.getChipDrawable()).getText() вместо.

...