【问题标题】:Xamarin Android AppCompatCheckBox error when link sdk with target 9.0 API 28 running on 6.0 API 23将 sdk 与在 6.0 API 23 上运行的目标 9.0 API 28 链接时 Xamarin Android AppCompatCheckBox 错误
【发布时间】:2019-08-06 16:34:12
【问题描述】:

我有一个针对 8.1 API 27 的应用。在针对 9.0 之后,我发现 CheckBox 有一个奇怪的行为:

  • 第一次单击时,该框未选中,但“已选中”的值已更改
  • 从第二次单击开始,复选标记和“选中”值会相应切换
  • 即自第一次点击后,复选标记与“checked”值不同步

此错误仅在的组合中发生

  • 使用链接 SDK 程序集发布构建(调试模式没问题)
  • 目标 9.0 API 28(目标 8.1 没问题)
  • 在 6.0 API 23 上运行(Genymotion 模拟器和真机都有问题。在 4.4、7.0、9.0 上测试没有问题)

可以使用新的 Xamarin 项目 - Android App 重新生成它。 在 content_main.axml 中,将内容替换为:

<TextView
    android:id="@+id/textView1" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="Hello World!" />

<CheckBox
    android:text="CheckBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkBox1" />

在 MainActivity.OnCreate 中,添加代码检查结果

        TextView tv = FindViewById<TextView>(Resource.Id.textView1);
        CheckBox cb = FindViewById<CheckBox>(Resource.Id.checkBox1);
        cb.Click += (o, e) =>
        {
            if (cb.Checked)
            {
                tv.Text = "checked";
            }
            else
            {
                tv.Text = "not checked";
            }
        };

此外,在代码中创建复选框时(在 appcomp 活动中):

  • 使用 AppCompatCheckBox 类会出现与 xml 中相同的错误
  • 使用 CheckBox 类没有错误

在我的应用程序中,我使用“CheckBox”类而不是 appcomp 修复了代码生成的复选框。但是,我找不到 xml 的任何解决方法,因为它已经被定义为“CheckBox”。

它很可能与链接有关(但仅在 API 23 上???)一种可能的解决方案是不链接 AppCompatCheckBox。我尝试使用链接器配置文件跳过链接类 CheckBox 和 AppCompatCheckBox。它不起作用(也许我做错了)。然后我尝试使用链接器属性跳过链接“Xamarin.Android.Support.v7.AppCompat”和“Mono.Android”的整个程序集。它也不起作用。

复选框只有在没有链接时才会正常运行。

请帮忙。提前致谢。

尼克

【问题讨论】:

  • 对不起,我无法按照你说的步骤重现这个问题。它工作正常。
  • Jessie,我添加了一个链接来下载我的测试项目。我可以在 Genymotion Samsung Galaxy S6 Android 6.0 API 23 上产生错误。请尝试是否可以在您身边显示错误。谢谢。
  • 您好 Nick,我建议您在 github.com/xamarin/xamarin-android 中使用 ProGuard 的部分提供您的错误,因为这似乎是 Xamarin.Android 的一个错误。您需要提供您的存储库或示例来检查它。

标签: android xamarin.android


【解决方案1】:

是的,我可以通过你的演示重现这个问题,但我也通过取消选中Enable Proguard 选项解决了这个问题,如下所示,这里的ProGuard option 应该已经删除了我们需要的必要库。 更多详情可以查看https://docs.microsoft.com/en-us/xamarin/android/deploy-test/release-prep/?tabs=windows#proguard.

【讨论】:

  • Jessie 非常感谢您指出这是一个 Proguard 问题(确实是 Proguard + 链接)。我刚刚发现一个月前在stackoverflow.com/questions/56783187/… 提出了同样的问题。在那篇文章之后,我进一步缩小了课程范围,以保留 android.support.graphics.** 的 proguard 来解决它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2015-11-12
  • 2020-06-24
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多