1

我在更改按钮的可见性时遇到问题。每当我使用 setVisibility() 方法时,我都会得到一个 nullPointerException。这是我得到的错误:

04-08 15:59:02.529: E/AndroidRuntime(2807): FATAL EXCEPTION: main
04-08 15:59:02.529: E/AndroidRuntime(2807): java.lang.NullPointerException
04-08 15:59:02.529: E/AndroidRuntime(2807):     at com.android.Rides.RideTracking.onClick(RideTracking.java:307)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.view.View.performClick(View.java:4204)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.view.View$PerformClick.run(View.java:17355)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.os.Handler.handleCallback(Handler.java:725)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.os.Looper.loop(Looper.java:137)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at java.lang.reflect.Method.invokeNative(Native Method)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at java.lang.reflect.Method.invoke(Method.java:511)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-08 15:59:02.529: E/AndroidRuntime(2807):     at dalvik.system.NativeStart.main(Native Method)

这是代码:

        public View btnStart = null;
        public View btnPause = null;
        public View btnResume = null;

        case R.id.btnPauseRide:
            mLoggerServiceManager.pauseGPSLogging();

            setResult( RESULT_OK, intent );
            btnPause.setVisibility(View.GONE);
            btnResume.setVisibility(View.VISIBLE);
            break;

        case R.id.btnResumeRide: 
            mLoggerServiceManager.resumeGPSLogging();
            setResult(RESULT_OK, intent);

            btnResume.setVisibility(View.GONE);
            btnPause.setVisibility(View.VISIBLE);
        default:
                            break;

任何帮助将不胜感激。

4

3 回答 3

5

这是因为

 public View btnPause = null;

你设置buttonnull. 你需要分配它。假设你已经打电话setContentView()buttonlayout

btnPause = (Button) findViewwById(R.id.button_id);

你已经完成了所有buttons设置,null然后尝试在它们上调用一个方法,每次setVisibility()都会返回null

如果您想隐藏Button按下的那个,那么您可以这样做

    case R.id.btnPauseRide:
        mLoggerServiceManager.pauseGPSLogging();

        setResult( RESULT_OK, intent );
        btnPPauseRide.setVisibility(View.GONE);
        btnResume.setVisibility(View.VISIBLE);
        break;

而不是创建这些新View的 s 除非你有其他事情发生

于 2013-04-08T16:12:37.950 回答
1

看起来您尝试访问的变量未设置。如果您设置并实际找到它,请检查您的 onCreate 方法。

于 2013-04-08T16:13:06.653 回答
1

您将获得空指针异常,因为您将视图分配为空。相反,尝试通过以下任一方式初始化视图:

public View btnPause = findViewById(R.id.btnPause);

或者....

public View btnPause = new View(this);
于 2013-04-08T16:14:27.020 回答