我們有一個Xamarin的Android應用程序,是有時遇到下列崩潰:內部Android崩潰在Xamarin周圍SetSpan
d Java.Lang.RuntimeExceptionsetSpan (13 ... 31) ends beyond length 18
Raw
--- End of managed Java.Lang.RuntimeException stack trace ---
java.lang.IndexOutOfBoundsException: setSpan (13 ... 31) ends beyond length 18
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1016)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:592)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
at android.widget.TextView.setSpan_internal(TextView.java:8753)
at android.widget.Editor$SuggestionsPopupWindow.onItemClick(Editor.java:2789)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
at android.widget.AbsListView$3.run(AbsListView.java:3638)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:780)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596)
at dalvik.system.NativeStart.main(Native Method)
經過一番調查後,我們確定是什麼原因導致大跌,以及其他人如何(使用普通Android的,不Xamarin,已經解決了它):
https://code.google.com/p/android/issues/detail?id=82788
的解決方案是延長的EditText並覆蓋二級保護方法:
protected void setSpan_internal(Object span, int start, int end, int flags) {
final int textLength = getText().length();
((Editable) getText()).setSpan(span, start, Math.min(end, textLength), flags);
}
protected void setCursorPosition_internal(int start, int end) {
final int textLength = getText().length();
Selection.setSelection(((Editable) getText()), Math.min(start, textLength), Math.min(end, textLength));
}
很好,一個簡單的解決方案。當然,除了包裝Xamarin時,Xamarin似乎會將這些方法隱藏起來。它們不能在EditText(或TextView)的Xamarin實現中訪問。
那麼有沒有人有任何想法如何解決Xamarin內的這個問題?我相信我可以創建一個自定義的Android DLL來執行此修復,然後將其包裝在Xamarin綁定中。但我希望別人有一個更簡單的想法。
反射可能可以解決這個問題。但無論哪種方式都不是一個好方法。 –
你有辦法重現嗎?我正在使用'InputFilterLengthFilter',並且在使用'textAutoComplete'之前沒有看到這個錯誤,字典中比過濾器長度更長的單詞會被截斷...... – SushiHangover
我們只能在4.4.2中重現它,和特定的Zebra設備上。但是我們重現它的方式是簡單地使用任何EditText,將一些文本放入它,打空格,放一些文本,打空格。選擇第二組字母並選擇其中一個拼寫更正。這個應用程序每次都會崩潰。 – Jared