Я пытаюсь динамически создавать некоторые компоненты чипа выбора на основе 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, но мне не повезло. Хотелось бы получить совет, если это возможно. Большое спасибо.
ArrayList.get(selectedChipId.getTitle()).
, но не думаю, что так должно быть. - person Kar Keng Chan   schedule 13.06.2019