我所有的popupwindow写在一个类里面,现在要从这个类的一个button点击事件跳到另外一个activity,出错了。
点击popupwindow里的一个button后后跳到ActivityB,
提示空指针,求解
public void onClick(View v) {
// TODO Auto-generated method stub
pw.dismiss();
Intent intent = new Intent();
intent.setClass(v.getContext(),ActivityB.class);
System.out.println(intent);
startActivity(intent);
}
我打印intent,它不是空的,但在startActivity(intent)时出错。
错误信息如下:
02-21 10:38:17.088: ERROR/AndroidRuntime(280): FATAL EXCEPTION: main
02-21 10:38:17.088: ERROR/AndroidRuntime(280): java.lang.NullPointerException
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.Activity.startActivityForResult(Activity.java:2817)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.Activity.startActivity(Activity.java:2923)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.confpad.calendar.Calendar_popup_window$4.onClick(Calendar_popup_window.java:137)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.view.View.performClick(View.java:2408)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.view.View$PerformClick.run(View.java:8816)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Handler.handleCallback(Handler.java:587)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Looper.loop(Looper.java:123)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invoke(Method.java:521)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at dalvik.system.NativeStart.main(Native Method)
点击popupwindow里的一个button后后跳到ActivityB,
提示空指针,求解
public void onClick(View v) {
// TODO Auto-generated method stub
pw.dismiss();
Intent intent = new Intent();
intent.setClass(v.getContext(),ActivityB.class);
System.out.println(intent);
startActivity(intent);
}
我打印intent,它不是空的,但在startActivity(intent)时出错。
错误信息如下:
02-21 10:38:17.088: ERROR/AndroidRuntime(280): FATAL EXCEPTION: main
02-21 10:38:17.088: ERROR/AndroidRuntime(280): java.lang.NullPointerException
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.Activity.startActivityForResult(Activity.java:2817)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.Activity.startActivity(Activity.java:2923)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.confpad.calendar.Calendar_popup_window$4.onClick(Calendar_popup_window.java:137)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.view.View.performClick(View.java:2408)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.view.View$PerformClick.run(View.java:8816)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Handler.handleCallback(Handler.java:587)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.os.Looper.loop(Looper.java:123)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invoke(Method.java:521)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-21 10:38:17.088: ERROR/AndroidRuntime(280): at dalvik.system.NativeStart.main(Native Method)
把这行代码贴出来看看。应该是哪个变量没有赋值。
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
public void showOptionPopup(Context context, final int location_id,
String page_type) {
final Event event = event_list_use.get(location_id); LayoutInflater inflater = (LayoutInflater) context
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View vPopupWindow = inflater.inflate(
R.layout.calendar_program_list_option_popup, null);
final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
TextView enter = (TextView) vPopupWindow
.findViewById(R.id.TextView_calendar_option_enter);
enter.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
pw.dismiss();
intent.setClass(v.getContext(),Calendar_my_calendar.class);
startActivity(intent);
}
}}
}Calendar_my_calendar.class和当前的这个类在一个包下,我的这个Calendar_popup_window一个公共的类,它里面写了多个popupwindow的创建,其他的activity调用这个类里面的某个方法来显示一个popupwindow,不知道这里能否用intent进行acitivty之间的跳转!谢谢
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
public void showOptionPopup(Context context, final int location_id,
String page_type) {
final Event event = event_list_use.get(location_id);LayoutInflater inflater = (LayoutInflater) context
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View vPopupWindow = inflater.inflate(
R.layout.calendar_program_list_option_popup, null);
final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
TextView enter = (TextView) vPopupWindow
.findViewById(R.id.TextView_calendar_option_enter);
enter.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v) {
pw.dismiss();
intent.setClass(v.getContext(),Calendar_my_calendar.class);
startActivity(intent);
}
}}
}Calendar_my_calendar.class 和当前的这个类在一个包下,我的这个Calendar_popup_window一个公共的类,它里面写了多个popupwindow的创建,其他的 activity调用这个类里面的某个方法来显示一个popupwindow,不知道这里能否用intent进行acitivty之间的跳转!谢谢
startActivity(intent);而最后调到的framework下的启动代码:public void startActivityForResult(Intent intent, int requestCode) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
if (ar != null) {
mMainThread.sendActivityResult(
mToken, mEmbeddedID, requestCode, ar.getResultCode(),
ar.getResultData());
}
if (requestCode >= 0) {
// If this start is requesting a result, we can avoid making
// the activity visible until the result is received. Setting
// this code during onCreate(Bundle savedInstanceState) or onResume() will keep the
// activity hidden during this time, to avoid flickering.
// This can only be done when a result is requested because
// that guarantees we will get information back when the
// activity is finished, no matter what happens to it.
mStartedActivity = true;
}
} else {
mParent.startActivityFromChild(this, intent, requestCode);
}
}
官方源代码的2817行就是这个:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
这里可能为null的很多啊:
mMainThread
mToken
intent不过应该都不可能是空的。另外:
你的popwindow,是不是要一个setOnDismissListener啊
不然pw.dismiss();
后,谁去处理onDismiss()啊?
public void showOptionPopup(Context context, final int location_id,
String page_type) {
final Event event = event_list_use.get(location_id);LayoutInflater inflater = (LayoutInflater) context
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View vPopupWindow = inflater.inflate(
R.layout.calendar_program_list_option_popup, null);
final PopupWindow pw = new PopupWindow(vPopupWindow, 350, 320, true);
TextView enter = (TextView) vPopupWindow
.findViewById(R.id.TextView_calendar_option_enter);
enter.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v) {
pw.dismiss();
intent.setClass(v.getContext(),Calendar_my_calendar.class);
startActivity(intent);
}
}}
startActivity改成context.startActivity,同时,showOptionPopup的参数Context context改称final Context context
改成pw.getContext 或者Calendar_popup_window.this
试试