通过ButtonClick设置TextView时发生NullPointerException [英] NullPointerException when setting TextView via ButtonClick

查看:116
本文介绍了通过ButtonClick设置TextView时发生NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在通过片段中的回调集修改TextView中的文本时遇到问题:

I'm having issues in modifying the text in a TextView via a callback set from a fragment:

我的片段如下:

公共类GetStartedFragment扩展了Fragment实现的OnClickListener {

public class GetStartedFragment extends Fragment implements OnClickListener {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View view = inflater.inflate(R.layout.myFragment, container, false);

    Button b1, b2, b3;
    b1 = (Button) view.findViewById(R.id.btn_myBtn);
    b1.setOnClickListener(this);


    return view;
}

@Override
public void onClick(View v) {
    TextView textView = (TextView) v.findViewById(R.id.txt_myTxtBox);
    textView.setText("Hi!");
}

}

在片段xml文件中,我有以下问题:

in the fragments xml file I have the following defiend:

<Button
        android:id="@+id/btn_myBtn"
        android:text="@string/myBtn" />

<TextView android:id="@+id/txt_myTxtBox" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_weight="1"
    android:gravity="center" android:text="Foo" />

当我单击按钮时,我得到一个空指针异常,这是我的LogCat日志:

When I click the button I get a null pointer exception, here is my LogCat log:

08-12 12:32:56.963: E/AndroidRuntime(1089): FATAL EXCEPTION: main
08-12 12:32:56.963: E/AndroidRuntime(1089): java.lang.NullPointerException
08-12 12:32:56.963: E/AndroidRuntime(1089):     at com.foo.bar.fragments.more.GetStartedFragment.onClick(GetStartedFragment.java:61)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.view.View.performClick(View.java:4240)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.view.View$PerformClick.run(View.java:17721)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.os.Handler.handleCallback(Handler.java:730)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.os.Looper.loop(Looper.java:137)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at java.lang.reflect.Method.invokeNative(Native Method)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at java.lang.reflect.Method.invoke(Method.java:525)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-12 12:32:56.963: E/AndroidRuntime(1089):     at dalvik.system.NativeStart.main(Native Method)

推荐答案

这是错误的根源:v.findViewById(...)无法正常工作,因为 v是您按下的按钮,并且它不包含TextView.因此,在调用textView.setText(...)时会收到NullPointer异常.

This is the source of error: v.findViewById(...) cannot work, because v is the Button you pressed, and it does not contain a TextView. Therefore you are getting a NullPointer exception when calling textView.setText(...);

   @Override
    public void onClick(View v) {
        TextView textView = (TextView) v.findViewById(R.id.txt_myTxtBox);
        textView.setText("Hi!");
    }

我建议将此作为解决方案: 只需使TextView成为成员变量,然后在onCreateView()方法中对其进行初始化即可.

I recommend this as a solution: Simply make the TextView a member variable and initialize it inside the onCreateView() method.

private TextView textView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View view = inflater.inflate(R.layout.myFragment, container, false);

    Button b1, b2, b3;
    b1 = (Button) view.findViewById(R.id.btn_myBtn);
    b1.setOnClickListener(this);
    textView = (TextView) view.findViewById(R.id.txt_myTxtBox);

    return view;
}

@Override
public void onClick(View pressedButton) {
    textView.setText("Hi!");
}

这篇关于通过ButtonClick设置TextView时发生NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆