我正在尝试通过一些计算基于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,但没有运气。如果可能的话,希望有一些建议。非常感谢你。