在创建TextView的AccessibilityNodeInfo时抛出NullPointerException

时间:2014-05-20 02:05:50

标签: android

我正在尝试使用以下代码创建AccessibilityNodeInfo TextView

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_user);

    userTexView = (TextView) findViewById(R.id.userTextView);
    userTexView.createAccessibilityNodeInfo();
}

activity_user.xml

<TextView
    android:id="@+id/userTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/UserText"
    android:contentDescription="@string/UserDescription" />

但是我得到了NullPointerException。

05-20 07:15:14.383 29984 29984 E AndroidRuntime: Caused by: java.lang.NullPointerException
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.view.View.onInitializeAccessibilityNodeInfoInternal(View.java:5059)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.view.View.onInitializeAccessibilityNodeInfo(View.java:5004)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.widget.TextView.onInitializeAccessibilityNodeInfo(TextView.java:8048)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.view.View.createAccessibilityNodeInfoInternal(View.java:4965)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.view.View.createAccessibilityNodeInfo(View.java:4952)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at in.mobilitas.mhealth.ui.MHealthActivity.onCreate(MHealthActivity.java:82)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:5150)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2192)
05-20 07:15:14.383 29984 29984 E AndroidRuntime:    ... 11 more

有人遇到类似的问题吗?

2 个答案:

答案 0 :(得分:3)

在将视图附加到窗口之前,无法调用

createAccessibilityNodeInfo()。请参阅View类的源代码:

void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
   Rect bounds = mAttachInfo.mTmpInvalRect;

当前视图的边界用于填充AccessibilityNodeInfo实例,并且在附加视图之前未定义这些实例。

答案 1 :(得分:1)

接受答案是正确的,我只是添加了一种解决方法:

在onCreate中

View view = (View) findViewById(R.id.my_view);
view.setAccessibilityDelegate(new View.AccessibilityDelegate() {
    @Override
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
        super.onInitializeAccessibilityNodeInfo(host, info);
        // Do some stuff with info
    }
}