【发布时间】: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 的一个错误。您需要提供您的存储库或示例来检查它。