簡體   English   中英

切換彈出窗口NullPointerException

[英]Switch in popup window NullPointerException

在settings.xml中:

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

<Switch
    android:id="@+id/fmode"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView2"
    android:layout_marginLeft="30dp"
    android: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 android.view.View.performClick(View.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at android.view.View$PerformClick.run(View.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at android.os.Handler.handleCallback(Handler.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at android.os.Handler.dispatchMessage(Handler.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at android.os.Looper.loop(Looper.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at android.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.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
11-15 09:26:08.302: E/AndroidRuntime(11433):    at dalvik.system.NativeStart.main(Native Method)

出了什么問題以及如何實施它? 提前致謝

你需要這樣做

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);    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM