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并从其他类调用该方法。虽然我认为这不是一个合适的干净的编码风格。有什么建议吗?