当前位置:编程学习 > wap >>

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之间的跳转!谢谢。。。 --------------------编程问答--------------------
引用 1 楼 cug87525842 的回复:
  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之间的跳转!谢谢。。。 --------------------编程问答-------------------- 大哥以后帖代码注意点,别这样贴,看着不舒服 --------------------编程问答--------------------  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()啊?
--------------------编程问答--------------------
引用 6 楼 freshui 的回复:
从trace上看,是挂在这行了:
startActivity(intent);

而最后调到的framework下的启动代码:
Java code

public void startActivityForResult(Intent intent, int requestCode) {
        if (mParent == null) {
            Instrum……



写了它的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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,