- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
This问题是一样的,但它似乎没有回答为什么这个转换在 Release模式下失败但在调试中工作的问题。
Android 文档指定:
Return the text the TextView is displaying. If setText() was called with an argument of BufferType.SPANNABLE or BufferType.EDITABLE, you can cast the return value from this method to Spannable or Editable, respectively. Note: The content of the return value should not be modified. If you want a modifiable one, you should make your own copy first.
如果我在调试中运行以下命令它会工作,在发布时它会抛出一个 InvalidCastException
var editText = FindViewById<EditText>(Resource.Id.MyEditText);
editText.SetText("hello", TextView.BufferType.Spannable);
var myTextView = FindViewById<TextView>(Resource.Id.MyTextView);
try
{
ISpannable t21 = (ISpannable)editText.TextFormatted;
ISpanned t22 = (ISpanned)editText.TextFormatted;
}
catch (Exception exception)
{
myTextView.Text = exception.Message;
}
FATAL EXCEPTION: main
06-09 16:30:34.135 E/AndroidRuntime(31672): Process: App27.App27, PID: 31672
06-09 16:30:34.135 E/AndroidRuntime(31672): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
06-09 16:30:34.135 E/AndroidRuntime(31672): Caused by: md52ce486a14f4bc06-09 16:30:34.135 E/AndroidRuntime(31672): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-09 16:30:34.135 E/AndroidRuntime(31672): at dalvik.system.NativeStart.main(Native Method)
06-09 16:30:34.135 E/AndroidRuntime(31672): Caused by: java.lang.reflect.InvocationTargetException
06-09 16:30:34.135 E/AndroidRuntime(31672): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 16:30:34.135 E/AndroidRuntime(31672): at java.lang.reflect.Method.invoke(Method.java:515)
06-09 16:30:34.135 E/AndroidRuntime(31672): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-09 16:30:34.135 E/AndroidRuntime(31672): ... 2 more
06-09 16:30:34.135 E/AndroidRuntime(31672): Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.InvalidCastException: Cannot cast from source type to destination type.
06-09 16:30:34.135 E/AndroidRuntime(31672): at App27.MainActivity.OnCreate (Android.OS.Bundle) [0x00074] in d:\Users\dbeattie\Documents\Visual Studio 2013\Projects\App27\App27\MainActivity.cs:29
06-09 16:30:34.135 E/AndroidRuntime(31672): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <IL 0x00013, 0x000ef>
06-09 16:30:34.135 E/AndroidRuntime(31672): at (wrapper dynamic-method) object.6917b467-8852-465b-9332-eaefa6fe6832 (intptr,intptr,intptr) <IL 0x00017, 0x00043>
版本信息:
Xamarin 3.11.590.0 (5160db7) Visual Studio extension to enable development for Xamarin.iOS and Xamarin.Android.
Xamarin.Android 5.1.3.1 (d419c934e6ce2113653ff4c40214e3a5d5a69440) Visual Studio plugin to enable development for Xamarin.Android.
最佳答案
我能够重现您的问题。虽然我不能确切地告诉你为什么会发生这种情况,但我确实注意到了这一点。这可能是 Xamarin.Android 中的一个错误和/或链接器过于激进并且做了一些导致 InvalidCastException 的事情,这就是我所做的。
在我的发布配置中,我的链接器设置为“仅限 SDK 程序集”。 InvalidCastException 发生了。当我将链接器设置为“不链接”时,InvalidCastException 没有发生。这使其类似于链接器设置为“不链接”的调试配置。
因此,链接器似乎正在剥离所需的内容和/或 Xamarin.Android 存在错误。
但是,我确实找到了一个既适用于调试又适用于发布的解决方案。由于 ISpannable 和 ISpanned 对象是 Java 对象的 java 桥梁,最终将实现 Java.Lang.Obj,因此我通常在转换这些对象时使用 JavaCast<>。在转换 C# 对象时,我使用 () 或“as”关键字。在这种情况下,由于您正在尝试转换 Java 对象(包装器),因此正确的转换方法应该是使用 JavaCast<>,如下所示:
var editText = FindViewById<EditText>(Resource.Id.MyEditText);
editText.SetText("hello", TextView.BufferType.Spannable);
var myTextView = FindViewById<TextView>(Resource.Id.MyTextView);
try
{
ISpannable t21 = editText.TextFormatted.JavaCast<ISpannable>();
ISpanned t22 = editText.TextFormatted.JavaCast<ISpanned>();
}
catch (Exception exception)
{
myTextView.Text = exception.Message;
}
使用此方法适用于调试和发布配置,包括将链接器设置为“不链接”和“仅 SDK 程序集”。
无论哪种方式,我都可能会通过在 http://bugzilla.xamarin.com 上提交错误报告让 Xamarin 人员知道。 .无论如何,我认为在这种情况下使用 JavaCast<>(因为您正在转换 java 包装器)是在这种情况下转换的正确方法。
关于c# - 将 TextFormatted 转换为 ISpannable 或 ISpanned 时发布的 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742875/
我想知道是否有办法删除您使用 QCalendarWidget::setDateTextFormat(...) 创建的所有 QTextCharFormat,因为我需要这样的功能来更新我的整个日历加载了新
我的问题与谷歌 Protocol Buffer 的 C# 实现有关(protobuf-csharp-port,由 jon skeet 设计,干得好!) 我遇到了扩展问题:假设我写了: “transpo
我正在尝试在 EditText 控件中呈现 html 字符串。粗体、斜体和下划线 html 正确呈现,但删除线被忽略。 这是 EditText 控件,没什么特别的: 这里是在 EditText 控件
这个问题在这里已经有了答案: VBA: Convert Text to Number (10 个回答) 3年前关闭。 我正在寻找一种代码,它将为大量带有数字的单元格转换单元格的格式。我应用的程序是将数
我有一个 TextField 格式为粗体和蓝色。但是,当我更改 TextField.text 时,textfield 的格式会重置,我必须再次 setTextFormat。 这是我用来设置我的 Tex
我在 apache karaf 4.2.6 和 java 11 中有一个模块,可以验证 Google Play 中的购买收据。我正在使用 androidpublisher。 当它第一次发送请求时,我在
我有一个带有转义 HTML 字符的 RSS 提要,我想在文本组件中显示该提要,并在其中使用 elide: Text.ElideRight 修剪多余的内容和 wrapMode: text.WordWra
我在编写 AS3 时遇到了内存泄漏问题。 我尝试在 as3 中格式化文本并将其添加到舞台上,但发生了一些疯狂的事情。 这是我的代码的一部分: var format:TextFormat = new T
This问题是一样的,但它似乎没有回答为什么这个转换在 Release模式下失败但在调试中工作的问题。 Android 文档指定: Return the text the TextView is di
我是一名优秀的程序员,十分优秀!