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

Posted

技术标签:

【中文标题】ANDROID:从膨胀的弹出视图启动新活动【英文标题】:ANDROID: launch new activity from inflated pop up view 【发布时间】:2017-07-12 16:46:50 【问题描述】:

我有一个 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 按钮启动主要活动,但它不起作用,所以这告诉我问题出在此处.

【问题讨论】:

我只是通过在 main_activity 类中定义一个方法来对问题进行排序,该方法将启动新活动并从不同的类调用此方法。虽然我认为这不是一种适当的干净编码风格。有什么建议吗? 【参考方案1】:

您需要将 Activity 上下文传递给 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 从类内任何位置的内部类(侦听器)访问它。

【讨论】:

它没有给我那个选项。顺便说一句,main_activity 类扩展了 AppCompatActivity,与处理弹出表单的 Activity 相同

以上是关于ANDROID:从膨胀的弹出视图启动新活动的主要内容,如果未能解决你的问题,请参考以下文章

模态下的弹出/推送视图

Android 活动未在某些设备上启动(错误膨胀类)

具有自定义样式的TextView导致奇怪的膨胀异常

Android:延迟加载 DataBinding 视图会引发异常

片段未附加到我的活动

无法启动活动 ComponentInfo 二进制 XML 文件第 13 行:膨胀类 com.google.android.material.appbar.MaterialToolbar 时出错