android popupwindow跳转activity
我所有的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)
--------------------编程问答-------------------- com.confpad.calendar.Calendar_popup_window$4.onClick(Calendar_popup_window.java:137)
把这行代码贴出来看看。应该是哪个变量没有赋值。 --------------------编程问答-------------------- public class Calendar_popup_window extends Activity {
public void onCreate(Bundle savedInstanceState) {
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之间的跳转!谢谢。。。 --------------------编程问答--------------------
public class Calendar_popup_window extends Activity {
public void onCreate(Bundle savedInstanceState) {
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); v.getContext.startActivity();??是嚒,
--------------------编程问答-------------------- 从trace上看,是挂在这行了:
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()啊?
--------------------编程问答--------------------
写了它的intent的跳转写在setOnDismissListener里面还是会报相同的错误。 --------------------编程问答-------------------- --------------------编程问答-------------------- 碰到了和楼主一样的问题,把 startActivity(intent);改成 v.getContext().startActivity(intent);试试,我成功了。 --------------------编程问答--------------------
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 --------------------编程问答-------------------- startActivity改成((Activity)context).startActivity --------------------编程问答-------------------- 为什么我点击popupwindow中的textView后,不跳转,而且原来的Activity不反应了 --------------------编程问答-------------------- v.getContext(), 这句有问题吧
改成pw.getContext 或者Calendar_popup_window.this
试试
补充:移动开发 , Android