getText () всегда возвращает пустую строку из динамически созданного компонента Chip?

Я пытаюсь динамически создавать некоторые компоненты чипа выбора на основе ArrayList 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 и создав Toast с текстом (хотя это не сработало). Когда я пытался отобразить только CheckId, он работает.


        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, но мне не повезло. Хотелось бы получить совет, если это возможно. Большое спасибо.


person Kar Keng Chan    schedule 12.06.2019    source источник
comment
Вы можете получить правильный идентификатор чипов, нажав на них? также у вас есть ChipGroup? взгляните на этот пример: android--code .blogspot.com/2019/01/   -  person P4yam    schedule 12.06.2019
comment
@payam привет, да, я мог получить правильный идентификатор чипа и сослался на несколько примеров получения текста, но мне все еще не повезло. Мой текущий обходной путь состоит в том, чтобы иметь переменную, содержащую результаты массива, и использовать ArrayList.get(selectedChipId.getTitle())., но не думаю, что так должно быть.   -  person Kar Keng Chan    schedule 13.06.2019


Ответы (1)


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

person Kar Keng Chan    schedule 13.06.2019