这种情况通常是由于节点尚未完全加载或还没有可访问性资源的情况导致的。为了解决这个问题,可以使用ViewTreeObserver监听视图树并在树完成加载后尝试重新查找节点。以下是示例代码:
final int MY_NODE_ID = R.id.my_node_id;
final View myView = findViewById(MY_NODE_ID);
ViewTreeObserver vto = myView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
AccessibilityNodeInfo myNode = null;
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
if (rootNode != null) {
List myNodes = rootNode.findAccessibilityNodeInfosByViewId(MY_NODE_ID);
for (AccessibilityNodeInfo node : myNodes) {
if (node.isVisibleToUser()) {
myNode = node;
break;
}
}
}
if (myNode != null) {
//Do something with the node
}
}
});
这段代码将在树完成加载后删除全局布局侦听器,然后使用根节点进行重新搜索。如果我们找到可见的节点,则可以继续对其执行操作。