如何从非活动类打开新活动

时间:2014-01-11 10:34:00

标签: android android-intent google-maps-android-api-2 android-context

我知道这个问题早些时候也被提出过,但没有人帮助过我。我想要做的是当用户点击谷歌地图上的标记时创建一个新活动。当用户单击AlertDialog的“确定”按钮时,将生成此标记。我创建了一个单独的类作为AlertDialogGenerator(它是一个非活动类)来创建alertDialog。现在,当我单击此标记时,我在logcat中得到此异常:

 java.lang.NullPointerException
    at android.app.Activity.startActivityForResult(Activity.java:3390)
    at android.app.Activity.startActivityForResult(Activity.java:3351)
    at .onMarkerClick(.java:190)
    at com.google.android.gms.maps.GoogleMap$8.a(Unknown Source)
    at com.google.android.gms.maps.internal.k$a.onTransact(Unknown Source)
    at android.os.Binder.transact(Binder.java:347)
    at cni.a(SourceFile:84)
    at maps.af.bj.a(Unknown Source)
    at maps.ao.c.a(Unknown Source)
    at maps.ao.n.c(Unknown Source)
    at maps.ao.m.a(Unknown Source)
    at maps.ao.an.b(Unknown Source)
    at maps.ao.bc.onSingleTapConfirmed(Unknown Source)
    at maps.br.g.onSingleTapConfirmed(Unknown Source)
    at maps.br.i.handleMessage(Unknown Source)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

我知道这个错误与上下文有关,但我不知道我必须在这里传递什么上下文...我几乎尝试了所有上下文但没有一个工作。以下是意图的代码段。

Intent intent = new Intent(contextx,InfoActivity.class);

startActivityForResult(intent, 0);

以下是我调用startActivityForResult的代码:

public class Available extends Activity implements
        OnMarkerClickListener {

        private Context contextx;
    public Available(Context context) {
        super();
        this.contextx = context;
    }

    public Available() {
        super();
    }

    public static HashMap<Marker, DriverInfo> driverIdentification;
    private DriverInfo selectedDriverInfo;

    public DriverInfo getSelectedDriverInfo() {
        return selectedDriverInfo;
    }

    public void setSelectedDriverInfo(DriverInfo selectedDriverInfo) {
        this.selectedDriverInfo = selectedDriverInfo;
    }


    @Override
    public boolean onMarkerClick(Marker marker) {



        Intent intent = new Intent(contextx,DriverInfoActivity.class);

        startActivityForResult(intent, 0);

        return false;
    }

}

Contextx是包含google地图的活动的上下文,InfoActivity.class是我想在onMarker点击事件上创建的类。而且这个意图是在Marker点击事件监听器上创建的。

P.S.-我希望这些信息足够。如果我错过了什么,请发表评论。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

((Activity)contextx).startActivity(i);

甚至这个,保持startActivityForResult方法:

((Activity)contextx).startActivityForResult(intent, 0);

刚试过它并且有效。