ANDROID:从膨胀的弹出视图启动新活动

时间:2017-02-22 14:51:58

标签: java android android-activity nullpointerexception dialog

我有一个main_activity,按下按钮我会启动一个表单来完成:

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_activity)。 在这个新类中,我设置了所有单击侦听器等,以通过实现OnClickListener的第三个类来验证输入。

到目前为止,一切正常。但是现在我想测试名为HomePage的页面/活动,如果填写表单,用户应该登陆该页面/活动。 所以我不知道的是我从前一个处理程序中删除了点击监听器,并创建了一个匿名的监听器来简单地按下注册按钮上的新活动:

 //       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。 我已经尝试直接从main_activity启动HomePage.class并且它可以工作,而且我也尝试从这个REGISTER按钮启动主要活动,这没有用,所以这告诉我这个问题就在这里。

1 个答案:

答案 0 :(得分:1)

您需要将活动上下文传递给Intent构造函数。活动上下文和应用程序上下文不一样。活动背景包含更多信息。

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

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

其中yourActivity是您的活动实例。您可以将其作为变量传递,或者通过内部类(监听器)中的main_activity.this访问它,在类中的任何位置。