有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

弹出窗口中的java开关NullPointerException

在设置中。xml:

.....
<Switch
    安卓:id="@+id/flmode"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:layout_below="@+id/textView1"
    安卓:layout_marginLeft="30dp"
    安卓:layout_toRightOf="@+id/textView1" />

<Switch
    安卓:id="@+id/fmode"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:layout_below="@+id/textView2"
    安卓:layout_marginLeft="30dp"
    安卓:layout_toRightOf="@+id/textView2"/>
.....

呼叫弹出窗口:

public void showPopup(View anchorView) {

    View popupView = getLayoutInflater().inflate(R.layout.settings, null);

    PopupWindow popupWindow = new PopupWindow(popupView, 
                           LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    Switch flmode = (Switch) findViewById(R.id.flmode);

    flmode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){

        }
    });         

    Switch fmode = (Switch) findViewById(R.id.fmode);
    fmode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
        }
    }); 

    popupWindow.setFocusable(true);

    popupWindow.setBackgroundDrawable(new ColorDrawable());

    int location[] = new int[2];

    anchorView.getLocationOnScreen(location);

    popupWindow.showAtLocation(anchorView, Gravity.NO_GRAVITY, 
                                     location[0], location[1] + anchorView.getHeight());

}

启动错误后:

11-15 09:26:08.302: E/AndroidRuntime(11433): FATAL EXCEPTION: main
11-15 09:26:08.302: E/AndroidRuntime(11433): java.lang.NullPointerException
11-15 09:26:08.302: E/AndroidRuntime(11433):    at com.test.com.MainFirst.showPopup(MainFirst.java:507)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at com.test.com.MainFirst.onClick(MainFirst.java:242)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.view.View.performClick(View.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.view.View$PerformClick.run(View.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.os.Handler.handleCallback(Handler.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.os.Handler.dispatchMessage(Handler.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.os.Looper.loop(Looper.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at 安卓.app.ActivityThread.main(ActivityThread.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at java.lang.reflect.Method.invokeNative(Native Method)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at java.lang.reflect.Method.invoke(Method.java:511)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at dalvik.system.NativeStart.main(Native Method)

出了什么问题以及如何实施? 提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    你需要做什么

    Switch flmode = (Switch) popupView.findViewById(R.id.flmode);
    Switch fmode = (Switch) popupView.findViewById(R.id.fmode);
    

    代替

    Switch flmode = (Switch) findViewById(R.id.flmode);
    Switch fmode = (Switch) findViewById(R.id.fmode);