我有一个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按钮启动主要活动,这没有用,所以这告诉我这个问题就在这里。
答案 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访问它,在类中的任何位置。