gpt4 book ai didi

android - 清除文本时 EditText 崩溃

转载 作者:行者123 更新时间:2023-12-04 23:56:41 26 4
gpt4 key购买 nike

我想清除 EditText 中的文本。我试过:

  • editText.setText("")
  • editText.text.clear()
  • editText.editableText.clear()

并且有效。但有时会出现异常。

2018-12-11 16:23:44.367 13388-13388/com.example.helios.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.helios.myapplication, PID: 13388
java.lang.IndexOutOfBoundsException: setSpan (0 ... 6) ends beyond length 0
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1265)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677)
at android.widget.Editor$SuggestionsPopupWindow.updateSuggestions(Editor.java:3608)
at android.widget.Editor$SuggestionsPopupWindow.show(Editor.java:3480)
at android.widget.Editor.replace(Editor.java:359)
at android.widget.Editor$3.run(Editor.java:2129)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776

我从重写的 performClick() 执行该代码(我正在创建 EditText 的子类)。

似乎 EditText 没有意识到它应该取消/忘记建议机制并且它失败了。

你知道我应该做些什么来取消/防止建议失败吗?

我注意到如果我让弹出窗口出现,然后在 X 处单击两次(第一次关闭弹出窗口,第二次执行清除代码),就会发生异常。

更新:

代码的相关部分。实际代码有一个插件系统来添加不同的绘图和 Action ,但相关代码是这个:

    class MyEditText(..): EditText(context) {
...
override fun onTouchEvent(event: MotionEvent?): Boolean {
event!!
ensureDrawingInfo()
when (event.actionMasked) {
MotionEvent.ACTION_DOWN, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> {
lastTouchArea = pluginAreaFromMotionEvent(event)
}
}
return super.onTouchEvent(event)
}

override fun performClick(): Boolean {
lastTouchArea?.let {
plugins[it.pluginIndex].onClick(this, it.rightSide, ::invalidateDrawingInfo)
return true
}
return super.performClick()
}


class MyPlugin(val drawableLeft: Drawable, val drawableRight: Drawable) : Plugin {
....

override fun onClick(editText: MyEditText, rightSide: Boolean, redraw: () -> Unit) {
if (rightSide) {
// X
editText.text.clearSpans()
editText.text.clear()
}
}
}

最佳答案

问题是“updateSuggestions”在您更改EditText 中的文本后尝试setSpan。所以你需要在编辑器修改 EditText 后更改文本。只需将您的代码放入 view.post

Kotlin

mEditText.post {
mEditText.setText("your text")
}

Java

mEditText.post(new Runnable() {
@Override
void run() {
mEditText.setText("your text");
}
});

关于android - 清除文本时 EditText 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749080/

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