Java 安卓:从弹出视图启动新活动

Java 安卓:从弹出视图启动新活动,java,android,android-activity,nullpointerexception,dialog,Java,Android,Android Activity,Nullpointerexception,Dialog,我有一个主要的活动,通过按下按钮,我启动一个要完成的表单: popup= getLayoutInflater().inflate(R.layout.pop_up, null); signup = new SignUp(popup); register = (Button) findViewById(R.id.sign_up); AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MyLocalBartend

我有一个主要的活动,通过按下按钮,我启动一个要完成的表单:

popup= getLayoutInflater().inflate(R.layout.pop_up, null);
    signup = new SignUp(popup);
    register = (Button) findViewById(R.id.sign_up);
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MyLocalBartender.this);
    alertBuilder.setView(popup);
    final AlertDialog dialog = alertBuilder.create();
    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
            dialog.show();
        }
    });
您可以看到,我正在使用第二个活动类(SignUp)来管理表单,而不是从中启动表单的根类(main_活动)。 在这个新类中,我设置了所有的click监听器等,以通过实现onclick监听器的第三个类验证输入

在这之前一切都很顺利。但是现在我想测试名为HomePage的页面/活动,如果表单已填写,用户应该在其中登录。 因此,我不知道的是,我从以前的处理程序中删除了click listener,并创建了一个匿名侦听器,只需按下register按钮即可打开新的activity on register:

 //       signup_registerButton.setOnClickListener(new SignupListener(signup_emailField,signup_passwordField1,
 //               signup_passwordField2, signup_textTemp,signup_organiserRadio, signup_staffRadio,signup_alertMessage));
    ////*************************TEST******************* START
    signup_registerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent menu = new Intent(getApplicationContext(), HomePage.class);
            startActivity(menu);
        }
    });

    ////*************************TEST******************* END
但这将返回一个NullPointerException。
我试着直接从主活动启动HomePage.class,它可以工作,我也试着从这个注册按钮启动主活动,但没有工作,所以这告诉我问题出在这里。

您需要将活动上下文传递给意图构造函数。活动上下文和应用程序上下文不相同。活动上下文包含更多的信息

在您的情况下,您可以这样做:

signup_registerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent menu = new Intent(yourActivity, HomePage.class);
            startActivity(menu);
        }
    });

其中yourActivity是您的活动实例。您可以将其作为变量传递,也可以通过main_活动访问它。这可以从类中任何位置的内部类(侦听器)进行访问。

它没有给我该选项。顺便说一句,main_activity类扩展了AppCompatActivity,与处理弹出窗体的activity相同,我只是通过在main_activity类中定义一个方法来对问题进行排序,该方法将启动新的activity并从其他类调用该方法。虽然我认为这不是一个合适的干净的编码风格。有什么建议吗?