Android2.3下PopupWindows初始化時NullPointException導致程序崩潰的問題解決

如題,

Logcat信息如下:

09-11 09:55:10.839: E/AndroidRuntime(23541): FATAL EXCEPTION: main
09-11 09:55:10.839: E/AndroidRuntime(23541): java.lang.NullPointerException
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.PopupWindow.setContentView(PopupWindow.java:384)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.PopupWindow.<init>(PopupWindow.java:286)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.PopupWindow.<init>(PopupWindow.java:266)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.PopupWindow.<init>(PopupWindow.java:223)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$PopupWindows.<init>(ScanNoteDetailActivity.java:923)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$5.onItemClick(ScanNoteDetailActivity.java:603)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1998)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.os.Handler.handleCallback(Handler.java:587)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.os.Looper.loop(Looper.java:130)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at android.app.ActivityThread.main(ActivityThread.java:3687)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at java.lang.reflect.Method.invokeNative(Native Method)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at java.lang.reflect.Method.invoke(Method.java:507)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
09-11 09:55:10.839: E/AndroidRuntime(23541):     at dalvik.system.NativeStart.main(Native Method)


解決辦法:

在重寫PopupWindows的構造器中加上super(context);如下:

public class PopupWindows extends PopupWindow {
        public PopupWindows(Context mContext, View parent) {
            super(mContext);//添加
            View view = View.inflate(mContext, R.layout.item_popupwindow, null);

          //省略其他代碼

很不幸, 我如上添加了super(mContext);後在android4.0上運行又崩潰:NoClassDefFoundError log如下:

08-10 10:16:37.119: E/AndroidRuntime(6663): FATAL EXCEPTION: main

08-10 10:16:37.119: E/AndroidRuntime(6663): java.lang.NoClassDefFoundError: com.hanvon.inputmethod.ui.ScanNoteDetailActivity$PopupWindows

08-10 10:16:37.119: E/AndroidRuntime(6663):  at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$5.onItemClick(ScanNoteDetailActivity.java:603)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.widget.AdapterView.performItemClick(AdapterView.java:298)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.widget.AbsListView.performItemClick(AbsListView.java:1086)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2859)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.widget.AbsListView$1.run(AbsListView.java:3533)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.os.Handler.handleCallback(Handler.java:615)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.os.Handler.dispatchMessage(Handler.java:92)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.os.Looper.loop(Looper.java:137)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at android.app.ActivityThread.main(ActivityThread.java:4990)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at java.lang.reflect.Method.invokeNative(Native Method)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at java.lang.reflect.Method.invoke(Method.java:511)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:574)

08-10 10:16:37.119: E/AndroidRuntime(6663):  at dalvik.system.NativeStart.main(Native Method)


於是我將super(mContext);改爲了super(parent);問題解決.


public class PopupWindows extends PopupWindow {
        public PopupWindows(Context mContext, View parent) {
            super(parent);//修改
            View view = View.inflate(mContext, R.layout.item_popupwindow, null);

          //省略其他代碼

因爲時間原因, 未詳細研究原因. 大神如果知道, 煩請留言.

至此,poputwindow導致的我的程序崩潰問題在android2.3和android4.0上完美解決.



發佈了86 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章