如題,
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上完美解決.