【问题标题】:Is it normal to call two activities from two buttons in sequence两个按钮依次调用两个activity正常吗
【发布时间】:2012-12-07 15:34:06
【问题描述】:

我不知道如何正确表达这个问题,所以让我解释一下。 我注意到在android平台上,当您在一个活动中快速按下两个按钮时(在活动有机会离开屏幕之前按下一个按钮然后另一个按钮),两个活动被一个接一个地调用。它发生时不可见,但如果您按下后退按钮,则使用第二个按钮调用的活动离开(完成)并显示使用第一个按钮调用的活动。您必须再次返回才能返回调用活动。所以你必须按两次才能进入 Activity 2 的父 Activity。

所以我想知道这对其他人来说是否是一个问题,如果是,你将如何解决这个问题。或者你认为这不是什么大问题。

【问题讨论】:

    标签: android button android-activity start-activity


    【解决方案1】:

    您可以在startActivity(your_intent); 之后调用finish(),这样您要离开的活动就完成了,然后您就可以进入下一个活动,因此您不必按两次后退即可到达它的父活动。

    【讨论】:

    • 抱歉,您可能误解了我的意思。我有一个带有 2 个按钮的家庭活动。我单击按钮 1,然后很快我在家庭活动中单击按钮 2。然后它显示按钮 2 的活动。当我按下返回时,我转到使用按钮 1 调用的活动。所以第二个调用的活动不是从第一个调用的活动调用的,而是同时从家里调用的。
    • 活动保存在堆栈中。所以后退按钮实际上会弹出最后一个,即从第一个按钮调用的 Activity。
    • 是的,我知道,所以我想我的问题是,这真的很糟糕吗?如果用户快速单击 2 个按钮并且后退按钮没有按照他们的预期执行,它会关闭用户的应用吗?
    • 如果连续单击两个按钮,您希望后退按钮做什么?
    • 我正在为我的雇主编写一个儿童应用程序,而孩子们喜欢到处乱扔手指,所以这只是一个离题的问题,不是非常重要,除非我的老板看到这样的事情并且想要它消失。我从来没有听说过这是个问题,但我还是决定提出这个问题。
    【解决方案2】:

    我已经想出了如何解决这个问题。我有一个基本活动类,我的应用程序中的所有其他活动都继承自该类。我覆盖了

    onResume with:

    @Override
    protected void onResume()
    {
        super.onResume();
        setCanStartNewActivity(true);
    }
    

    和 startActivityForResult 与:

    @Override
    public void startActivityForResult(Intent intent, int requestCode)
    {
        //Does not allow starting a new activity unless previous activity returned
        //This is a trick to stop multiple simultaneous button presses starting multiple 
        //activities simultaneously.
        if(!canStartNewActivity)
            return;
        setCanStartNewActivity(false);
        super.startActivityForResult(intent, requestCode);
    }
    

    这基本上可以确保只有一个新的活动可以启动一个按钮。如果您同时松开两个按钮,则只有最早释放的按钮(即使是 10 微秒)会被触发,另一个仍然会发送意图,但在第一个触发的活动返回或应用程序死亡之前它不会触发。

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2022-09-23
      相关资源
      最近更新 更多