Android 使用适配器模式实现芯片组
我的片段包含一个Android 使用适配器模式实现芯片组,android,adapter,material-components-android,android-chips,Android,Adapter,Material Components Android,Android Chips,我的片段包含一个芯片组,根据用户的选择动态添加芯片。我希望实现的是一个适配器模式,其中列表暴露给正在创建芯片的适配器,用户可以在列表中添加/删除元素 我找不到任何方法来做到这一点,现在,每当用户与列表交互时,所有的芯片都会被重新创建 为了简洁起见,对代码进行了裁剪 XML文件 // capturing the user's choice <RadioGroup android:id="@+id/vehicles_radio_group"
芯片组
,根据用户的选择动态添加芯片
。我希望实现的是一个适配器模式,其中列表
暴露给正在创建芯片
的适配器,用户可以在列表中添加/删除元素
我找不到任何方法来做到这一点,现在,每当用户与列表交互时,所有的芯片都会被重新创建
为了简洁起见,对代码进行了裁剪
XML文件
// capturing the user's choice
<RadioGroup
android:id="@+id/vehicles_radio_group"
android:onCheckedChanged="@{vehicleViewModel::radioCheckedChanged}">
期待着像
// In fragment class
val adapter = ChipAdapter()
binding.chipGroup.setAdapter(adapter)
// In bindingUtils file
@BindingAdapter("fill_data")
fun RecyclerChipGroup.setData(list : MyListType){
val adapter = this.adapter as ChipAdapter
adapter.submitChipList(list)
}
//XML File
<RecyclerChipGroup
....
app:fill_data = "@{viewModel.dispatchingUnits}"
....
/>
//在片段类中
val适配器=芯片适配器()
binding.chipGroup.setAdapter(适配器)
//在bindingUtils文件中
@BindingAdapter(“填充数据”)
fun RecyclerChipGroup.setData(列表:MyListType){
val adapter=此.adapter作为芯片适配器
适配器提交列表(列表)
}
//XML文件
如何继续?如果您想要实现基于适配器的芯片列表和比芯片组更多的控件,那么您可以使用RecyclerView将芯片作为一个项目,并以从左到右或从右到左的顺序排列芯片,您可以创建自定义LayoutManager
有关更多详细信息,请访问。此库支持ChipsLayoutManager。对于动态更改的多个芯片,可以使用material chips()。为了创建一个芯片适配器,你可以访问我确实使用了材料芯片来显示用户的选择,后面的链接似乎是断断续续的。该链接提到了使用回收器视图布局管理器的回购。如果你不想在你的项目中使用库,那么这样做的概念是创建一个recycler视图及其带有芯片的适配器,而不是使用芯片组,因为它将提供recycler视图的所有功能以及比芯片组更大的灵活性。感谢链接,非常有用,考虑到这一点,只是为了使用
recyclerview
而不是芯片组
,但这给我留下了一个未解的问题,如果我们可以使用recyclerview
,为什么首先要使用芯片组
?是的,recyclerview和芯片组有不同的用例,正如您在问题中提到的,您需要一个基于适配器的芯片列表。由于芯片组没有适配器,所以RecyclerView是实现相同目标的最佳方式。
// register an observer and take action
myViewModel.dispatchingUnits.observe(viewLifecycleOwner) { allPairs ->
allPairs?.apply {
with(binding) {
// remove the existing chips if any
if (selectedPairChipGroup.isNotEmpty()) {
selectedPairChipGroup.removeAllViews()
}
// create new chips
allPairs.forEach { chipPair ->
createChips(chipPair)
}
}
}
}
// In fragment class
val adapter = ChipAdapter()
binding.chipGroup.setAdapter(adapter)
// In bindingUtils file
@BindingAdapter("fill_data")
fun RecyclerChipGroup.setData(list : MyListType){
val adapter = this.adapter as ChipAdapter
adapter.submitChipList(list)
}
//XML File
<RecyclerChipGroup
....
app:fill_data = "@{viewModel.dispatchingUnits}"
....
/>