Java 如何从弹出窗口开始活动?

Java 如何从弹出窗口开始活动?,java,android,android-activity,Java,Android,Android Activity,我有一个自定义的弹出窗口,在我的活动中有自己的布局(负责弹出窗口工作的代码在单独的类PopupUpIndowActivity中)。我想在此弹出窗口打开活动中指定一个按钮。我尝试了一些方法,但应用程序因NullPointerException崩溃 此活动的代码如下所示: public class FirstActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle sav

我有一个自定义的弹出窗口,在我的活动中有自己的布局(负责弹出窗口工作的代码在单独的类PopupUpIndowActivity中)。我想在此弹出窗口打开活动中指定一个按钮。我尝试了一些方法,但应用程序因NullPointerException崩溃

此活动的代码如下所示:

public class FirstActivity extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageView popupButton = (ImageView) this.findViewById(R.id.popup_btn);
    likemenuButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupWindow dw = new PopupWindow(v);
            dw.showLikePopDownMenu();
        }
    });
}

    // my stuff



//popup window
private class PopupWindow extends PopupWindowActivity implements OnClickListener {
    public PopupWindow(View anchor) {
        super(anchor);
    }

    @Override
    protected void onCreate() {
        // inflate layout
        LayoutInflater inflater =
                (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null);

        // setup button events
        ImageView aboutButton = (ImageView) findViewById(R.id.btn_about);
        aboutButton.setOnClickListener(this);

        this.setContentView(root);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.btn_about: {
        Intent activity = new Intent(FistActivity.this, About.class);
        startActivity(activity);
        break;
        }

    }
}}
}

另一方面:

private static class PopupWindow extends PopupWindowActivity implements OnClickListener {
        public PopupWindow(View anchor) {
        super(anchor);
    }

    @Override
    protected void onCreate() {
        // inflate layout
        LayoutInflater inflater =
                (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null);

        // setup button events
        ImageView searchButton = (ImageView) findViewById(R.id.btn_about);
        algebraButton.setOnClickListener(this);


        this.setContentView(root);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_about: {
            Intent intent = new Intent();
            intent.setClass(this, About.class);

            startActivity(intent);
            break;
        }

        default:
            break;
        }
}}
eclipse说,首先我应该从
私有静态类PopupWindow扩展PopupWindowActivity实现中删除
静态
,然后我对
intent.setClass(这是关于.class)有以下内容:

类型Intent中的方法setClass(Context,Class)不适用于参数
(FirstActivity.PopupWindow,类)

请帮忙


添加了第一次崩溃的日志:

03-07 00:28:07.750: D/AndroidRuntime(12472): Shutting down VM
03-07 00:28:07.750: W/dalvikvm(12472): threadid=1: thread exiting with uncaught exception (group=0x40018578)
03-07 00:28:07.759: E/AndroidRuntime(12472): FATAL EXCEPTION: main
03-07 00:28:07.759: E/AndroidRuntime(12472): java.lang.NullPointerException
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.example.FirstActivity$PopupWindow.onCreate(FirstActivity.java:110)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.quickaction.PopupWindowActivity.<init>(PopupWindowActivity.java:52)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.example.FirstActivity$PopupWindow.<init>(FirstActivity.java:97)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.example.FirstActivity$1.onClick(FirstActivity.java:30)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.view.View.performClick(View.java:2485)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.view.View$PerformClick.run(View.java:9080)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.os.Handler.handleCallback(Handler.java:587)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.os.Looper.loop(Looper.java:130)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at android.app.ActivityThread.main(ActivityThread.java:3687)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at java.lang.reflect.Method.invokeNative(Native Method)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at java.lang.reflect.Method.invoke(Method.java:507)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-07 00:28:07.759: E/AndroidRuntime(12472):    at dalvik.system.NativeStart.main(Native Method)
03-07 00:28:07.750:D/AndroidRuntime(12472):关闭虚拟机
03-07 00:28:07.750:W/dalvikvm(12472):threadid=1:线程以未捕获异常退出(组=0x40018578)
03-07 00:28:07.759:E/AndroidRuntime(12472):致命异常:主
03-07 00:28:07.759:E/AndroidRuntime(12472):java.lang.NullPointerException
03-07 00:28:07.759:E/AndroidRuntime(12472):在com.example.FirstActivity$PopupWindow.onCreate(FirstActivity.java:110)
03-07 00:28:07.759:E/AndroidRuntime(12472):在com.quickaction.poppUpindowActivity上。(poppUpindowActivity.java:52)
03-07 00:28:07.759:E/AndroidRuntime(12472):在com.example.FirstActivity$PopupWindow。(FirstActivity.java:97)
03-07 00:28:07.759:E/AndroidRuntime(12472):位于com.example.FirstActivity$1.onClick(FirstActivity.java:30)
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.view.view.performClick(view.java:2485)上
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.view.view$PerformClick.run(view.java:9080)
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.os.Handler.handleCallback(Handler.java:587)上
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.os.Handler.dispatchMessage(Handler.java:92)上
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.os.Looper.loop(Looper.java:130)上
03-07 00:28:07.759:E/AndroidRuntime(12472):在android.app.ActivityThread.main(ActivityThread.java:3687)上
03-07 00:28:07.759:E/AndroidRuntime(12472):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-07 00:28:07.759:E/AndroidRuntime(12472):位于java.lang.reflect.Method.invoke(Method.java:507)
03-07 00:28:07.759:E/AndroidRuntime(12472):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-07 00:28:07.759:E/AndroidRuntime(12472):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-07 00:28:07.759:E/AndroidRuntime(12472):在dalvik.system.NativeStart.main(本机方法)
按下按钮:

Intent intent = new Intent("<your-intent-goes-here");
<context>.startActivity(intent);
Intent Intent=new Intent(“按按钮时:

Intent intent = new Intent("<your-intent-goes-here");
<context>.startActivity(intent);

Intent Intent=新的Intent(“有很多方法可以解决这个问题。一种是通过对话框的构造函数传递对上下文的引用。

有很多方法可以解决这个问题。一种是通过对话框的构造函数传递对上下文的引用。

如果它因NullPointerException崩溃,你能在你的问题中包含堆栈跟踪吗关于?@jbowes我在问题中添加了日志。如果它因NullPointerException崩溃,您可以在问题中包括堆栈跟踪吗?@jbowes我在问题中添加了日志。我应该放什么来代替
“@Sabre您在清单中的活动的意图过滤器中定义的意图。在类的位置放置一个可以访问startActivity@Sabre在你的情况下,它将是poppuphindow。这个。startActivity(intent)我不太懂英语,我仍然不明白我应该用什么来代替“你的意图…”但是当我把PopupWindow而不是eclipse类放在上面时说,
类型StartAction的方法startActivity(Intent)是未定义的。PopupWindow
@Sabre你需要一个上下文对象来调用startActivity()。然后调用打开你想要打开的活动的Intent…你看过开发指南了吗()我应该放什么来代替清单中您在活动的意图过滤器中定义的
“@Sabre意图。在类的位置放一个可以访问startActivity@Sabre在您的情况下,它将是poppuphindow.this.startActivity(intent)我不太懂英语,我仍然不明白我应该用什么来代替“your intent…”。但是当我用PopupWindow代替类eclipse时,我说
类型startActivity(intent)的方法startActivity(intent)没有定义。PopupWindow
@Sabre你需要一个上下文对象来调用startActivity()。然后调用打开您想要打开的活动的意图…您是否查看了开发指南()