作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用辅助功能服务在屏幕上找到一个按钮并单击它,但由于某种原因我收到以下错误:
java.lang.IllegalStateException: Cannot perform this action on a not sealed instance.
at android.view.accessibility.AccessibilityNodeInfo.enforceSealed(AccessibilityNodeInfo.java:3046)
at android.view.accessibility.AccessibilityNodeInfo.findAccessibilityNodeInfosByText(AccessibilityNodeInfo.java:1529)
at com.myapp.adapters.Adapter_Click$11.run(Adapter_Click.java:1874)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Method.java:-2)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
它所指的行是:
List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText("Accept".toLowerCase());
然后我用它来点击按钮:
if (view.performAction(AccessibilityNodeInfo.ACTION_CLICK))
{
Log.e(TAG, "Button clicked");
}
在我最近更新到 AndroidX 之前,去年我没有发现任何问题。有没有办法在尝试单击它之前检查它是否是密封实例?我什至尝试将其包装在 try/catch 中,但它仍然使我的应用程序崩溃。
最佳答案
(这有点痛苦,但如果一个节点被放弃,它的大部分功能都会严重崩溃——甚至 refresh()
。这很奇怪,因为据我所知你可以只要您需要,就保留实例。)
您可以通过检查 getClassName()
是否返回 null 来轻松地检查一个是否仍然有效——如果返回 null,请像扔烫手山芋一样扔掉它!你不能再用它做任何事了——甚至不要 recycle()
它,因为你脚下已经有东西做了。
关于android - java.lang.IllegalStateException : Cannot perform this action on a not sealed instance 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843587/
我是一名优秀的程序员,十分优秀!