代码之家  ›  专栏  ›  技术社区  ›  Fred

一个人如何返回多个屏幕?

  •  1
  • Fred  · 技术社区  · 7 年前

    我认为这是一个非常常见的情况,应用程序有一个登录屏幕,然后他们把用户转发到主屏幕,或仪表板,或类似的东西。让我们坚持命名- LoginScreen HomeScreen .

    说这个应用程序很简单。开始于 一旦用户登录,它们就会被转发到 HoneScreen

    现在,如果用户回击,我们如何退出应用程序?到目前为止,它总是把我带到 登录屏幕 .

    进一步发展这个例子。假设在登录屏幕之前有一个欢迎屏幕,用户可以在其中决定登录或注册。在这种情况下,如何处理导航回来呢?

    本质上,我是在问,导航组件中是否有一个内置的功能,可以让您返回多个屏幕,如果没有,是否有办法实现这一点?非常感谢你。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Gratien Asimbahwe    7 年前

    为了达到这个目的,你可以在开始另一项活动之后完成每一项活动。例如 WelcomeScreen 他打电话来了 LoginScreen 你可以在什么时候直接完成 HomeScreen 完成 登录屏幕 主屏幕 所有活动都将关闭。

    或者,从目前的活动中你可以打电话给 System.exit(0) 退出应用程序。这适用于当你有很多活动,但如果你有一个将没有什么不同 finish()

    假设您有以下活动: ActivityA ActivityB ActivityC 你想回到我身边吗 活动a 不经过 活动B . 如果你 你可以把它带回到前面,这取决于你想什么时候做这件事。在我们的示例中,我们考虑活动何时结束:

        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            //this will bring the ActivityA on the front
    
            Intent intent=new Intent(this,ActivityA.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
    
        }
    

    或者你可能有一个不同的场景 LoginActivity 主屏幕 这将帮助我注册当前的调用活动,这样我就可以知道哪些活动将在成功登录后直接启动。

    if(sharedPreferences!=null) {
                        if (sharedPreferences.getBoolean("user_connected",false)){
                            startActivity(new Intent(this, HomeScreen.class));}
                        else
                        {
                            MySingleton.getInstance().setCurrentCallingActivity("HomeScreen");
                            startActivity(new Intent(this, LoginActivity.class));
                        }
                    }
    

    一次又一次 登陆界面 ,在成功登录后,我将执行以下操作:

     try
                                    {
                                        startActivity(new Intent(this,
                                                getClassLoader().loadClass(MySingleton.getInstance().getCurrentCallingActivity())));
                                        finish();
                                    }catch (ClassNotFoundException e)
                                    {
                    //your code
                                        finish();
                                    }
    

    我就是这样处理的,而且很管用。由您来查看相应的场景,并尝试是否可以工作。不同的方法可能同时存在,而且这远没有实现。

        2
  •  1
  •   navylover    7 年前

    Intent myIntent = new Intent(LoginScreen.this, HomeScreen.class);
    startActivity(myIntent);
    finish(); //finish LoginScreen, then when press back in HomeScreen, it will exit instead return LoginScreen
    
        3
  •  0
  •   hossam scott    7 年前

    首先你需要看看你是否喜欢使用 活动 .

    碎片 在堆栈中,则需要使用

     FragmentManager fms = getSupportFragmentManager();
     for (int i = 0; i < fms.getBackStackEntryCount(); ++i) {
                            fms.popBackStack(); }
    

    Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);
    if(fragment != null)
    getSupportFragmentManager().beginTransaction().remove(fragment).commit();
    

    现在关于活动,你需要考虑几个选项

    活动B是您的注册页面。 活动C是你的主页。

    如果您想在成功登录后从A移到C,请使用

    Intent intent = new Intent(Login.this, MainActivity.class);
    startActivity(intent);
    finish();
    

    如果你想从A转到B

    Intent intent = new Intent(Login.this, Register.class);
    startActivity(intent);
    

    Intent intent = new Intent(LoginSM.this, MainActivitySM.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();
    
    推荐文章