gpt4 book ai didi

安卓牛轧糖 : Why do checkboxes on Fragment have incomplete state when selected programmatically (but look fine on Lollipop)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:18 25 4
gpt4 key购买 nike

这是我的设置选项卡( fragment )在进行任何选择之前的样子:

no selections

在主 Fragment 中,用户可以从 Spinner 中进行选择——如下所示(在用户做出选择之后):

super is selected

当用户做出该选择时,将加载用户先前选择的保存在用户首选项中的选项,并选中相应的复选框。第一个快照中显示的复选框现在如下所示:

partially selected

看,现在关联复选框设置为粉红色的项目?这些项目变成粉红色,但由于某种原因没有在牛轧糖上显示支票。 这些项目实际上是被选中的 ,因为如果我单击它们一次,它们就会变为未选中状态。

Lollipop 按预期工作
但是,如果我在 Lollipop 上运行该程序,则项目会按预期完全选中(选中复选框)。

在 Nougat Works 上手动设置它们
此外,如果我在 Nougat 上手动设置它们(在应用程序运行时单击它们),那么它会在应用程序继续运行时对微调器中选择的所有其他项目按预期工作。

checkboxes are selected as expected

以下是要设置的内容的基础知识:

在 Spinner 中选择项目时,我获取 rootview 并调用 findViewById()

  addCharsTabCheckBox = (CheckBox)rootView.findViewById(R.id.addCharsTabCheckBox);
maxLengthTabCheckBox = (CheckBox)rootView.findViewById(R.id.maxLengthTabCheckBox);

之后,我只需在每个 CheckBox 上调用 setChecked():
addCharsTabCheckBox.setChecked(currentSiteKey.isHasSpecialChars());

你会碰巧知道为什么会发生这种情况吗?

你以前见过这种部分行为吗?

编辑 #1
在运行时,我还发现未选中的项目将显示为部分选中(复选框但灰色),如下所示:

unselected but checked

那些灰色的项目是 不是 实际选择。
此外,如果我在查看该设置 fragment 时更改设备方向,则复选框会被重绘(显然)并按预期显示未选中。

编辑 #2

刚刚在 Marshmallow 上进行了测试,它也确实在该 API 级别上正常(或按预期)工作。
marshmallow works also

编辑 3

我基于Android Studio 2.3.3 提供的TabPage 模板创建了一个简化的项目,以便更仔细地研究这个问题。

公共(public) GitHub 项目

我已将代码添加到公共(public) GitHub 存储库中,以便您可以获取并试用:
https://github.com/raddevus/CheckBoxFragTest

该项目与上面的项目略有不同,但它们都基于 Android Studio 2.3.3 提供的模板。
测试项目包括 3 个选项卡,因此我可以调查我是否会在所有选项卡页上看到相同的奇怪行为。 剧透 : 我没有。

这是应用程序在第一个标签页上的样子:

tab page 1

最有趣的两个部分
  • 当您单击 Tab Page 1 上的 [Toggle Checkbox] 按钮时,它会在两个复选框(tabPage2 上的 1 个复选框和 tabPage3 上的 1 个复选框)上调用 setChecked
  • 当您单击 TabPage3 上的按钮时,它将设置 tabPage1 上显示的复选框(如上图所示)。

  • 问题

    在 Nougat 上,当您单击 TabPage1 上的 [Toggle Checkbox] 按钮时,它会将 tabPage2 上的复选框设置为奇数状态,我们在原始问题报告中看到。
    但是,tabPage3 上的复选框已按预期设置并完全选中。

    编辑 4

    Oreo Android v8.0 API 级别 26

    我有更多的数据。我刚刚在 Oreo(模拟器)上运行了该应用程序,我在那里看到了同样的问题。
    这是我运行的版本:

    oreo version

    这是我第一次单击 [Toggle Checkbox] 按钮时的样子。

    partially-selected state Oreo

    但是,请注意 tabpage3 上的复选框实际上是正确选择的,即使它是从相同的静态 bool 值设置的:

    tabpage3 checkbox - selected

    如果您再次单击 [Toggle Checkbox] 按钮,则会出现奇怪的灰色复选框状态(实际上未选中。

    partially-selected unselected

    然而,tabpage3 上的复选框实际上没有被选中。

    现在,如果您再次单击 [Toggle Checkbox],它将正确选中 tabPage2 上的复选框,并且只要应用程序在此之后运行,它就会正常工作。

    最佳答案

    只需拨打此电话 jumpDrawablesToCurrentState()调用后radioButton.setChecked(true)checkBox.setChecked(true);
    在我的案例中对我有用的代码

    CheckBox checkBox   = (CheckBox) clView;   
    checkBox.setChecked(true);
    checkBox.jumpDrawablesToCurrentState();

    RadioButton radioButton = (RadioButton) clView;
    radioButton.setChecked(true);
    radioButton.jumpDrawablesToCurrentState();

    关于安卓牛轧糖 : Why do checkboxes on Fragment have incomplete state when selected programmatically (but look fine on Lollipop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516506/

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