gpt4 book ai didi

android - 如何以编程方式选择 Android 芯片组中的默认芯片?

转载 作者:行者123 更新时间:2023-12-04 16:27:04 26 4
gpt4 key购买 nike

TL;DR - 以编程方式选择默认选择 Chip 的正确方法是什么,它是 Android 中 ChipGroup 的子级?

--

在我的 android 应用程序中,我使用 com.google.android.material.chip.Chip样式为 @style/Widget.MaterialComponents.Chip.Choice表示用户可以为给定路线选择的 Activity 选择的组件(想想步行、自行车等)

因为一条路线可以有不同类型的 Activity ,所以我以编程方式将每种类型作为不同的芯片插入到 com.google.android.material.chip.ChipGroup 中。 .我还在 fragment 的 onViewCreated() 期间使用以下代码选择默认芯片作为插入列表中的第一个芯片

 private fun setupTypeSelection(types: List<Type>) {
types.forEach { type ->
val chip = layoutInflater.inflate(R.layout.chip_type, viewBinding.typeChipGroup, false) as Chip

chip.tag = type
/* Init chip text and icon */

chip.setOnClickListener {
/* Update selected type */
}

if (currentType == null) {
chip.isSelected = true
currentType = type
}

viewBinding.typeChipGroup.addView(chip)
}
}

这是 ChipGroup 的布局定义,其中我设置了单选等

芯片组布局.xml
<com.google.android.material.chip.ChipGroup
android:id="@+id/type_container"

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_medium"

app:chipSpacingHorizontal="@dimen/margin_medium"
app:selectionRequired="true"
app:singleLine="true"
app:singleSelection="true" />

这是芯片布局

芯片类型.xml
<com.google.android.material.chip.Chip xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"

style="@style/Widget.MaterialComponents.Chip.Choice"

android:layout_width="wrap_content"
android:layout_height="wrap_content"

app:chipIconEnabled="true" />

我面临的问题是以编程方式设置为选定的芯片 chip.isSelected = true即使在用户通过 UI 交互选择了不同的选项后,它仍保持选中状态。

以编程方式选择作为 Android 中 ChipGroup 子级的默认选择 Chip 的正确方法是什么?

最佳答案

找到了我的答案。

  • 使用View.generateViewId()并将新 ID 分配给
    新创建的芯片。然后,添加
  • 将芯片添加到其父芯片组
  • 使用 viewBinding.typeChipGroup.check(id) 查看芯片组

  • 这是最终代码:
    private fun setupTypeSelection(types: List<Trail.Type>) {

    types.forEach { type ->
    val chip = layoutInflater.inflate(R.layout.chip_trail_type, viewBinding.typeContainer, false) as Chip

    chip.id = View.generateViewId()
    /* Set chip details as usual */

    viewBinding.typeContainer.addView(chip)

    if (currentType == null) viewBinding.typeChipGroup.check(chip.id)
    }
    }

    关于android - 如何以编程方式选择 Android 芯片组中的默认芯片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61765154/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com