【问题标题】:Issue with launchMode ActivitylaunchMode 活动问题
【发布时间】:2014-01-13 02:33:37
【问题描述】:

我正在实现一个自定义启动器。我有两个活动:带有launchMode的活动A:singleInstance或singleTask,以及活动B。

Activity A 是主屏幕。有两种情况:

  • 如果我设置 Activity A 的启动模式:singleTask,我会从 Activity A 调用 Activity B(没关系)。在活动 B 中,如果我按 Home 键返回主屏幕,则屏幕为空(没有任何东西......)。
  • 如果我设置 Activity A 启动模式:singleInstance,我从 Activity A 调用 Activity B,然后它显示一个空白屏幕,然后转到 Activity B(在这种情况下,我按 Home 键返回主屏幕,它工作正常) .

那么,如何解决这个问题?我想:从Activity A调用Activity B,然后它直接进入Activity B,当我按下Home键时,它回到主屏幕(Activity A)。

【问题讨论】:

    标签: android android-activity launchmode


    【解决方案1】:

    在活动 B 中,您可以使用以下代码和后退按钮

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent a = new Intent(this,A.class);
            a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(a);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }     
    

    如果您想使用 home 键而不是使用以下代码覆盖 Home 键

     @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
           if(keyCode == KeyEvent.KEYCODE_HOME)
            {
              //yours code action
    return true;
            }
           if(keyCode==KeyEvent.KEYCODE_BACK)
           {
               //yours code action
    return true;
           }
          return super.onKeyDown(keyCode, event);
        }
    

    你也可以试试这个

    @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
    
            if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
                //yours code
                return true;
            }
            else
                return super.dispatchKeyEvent(event);
        }
    

    【讨论】:

    • 感谢您的回复。在这种情况下,您设置 SingleTask 或 SingleInstance ?此外,我只遇到 Home 键的问题。我在 Activity B 中使用 keyCode = KeyEvent.KEYCODE_HOME 添加了 onKeyDown,但是这个问题仍然没有解决。
    • 请这样写代码...@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { //你的代码返回 true; } 返回 super.onKeyDown(keyCode, event); }
    • 我更新了你的代码,但它没有遇到带有 KEYCODE_HOME 的 OnKeyDown。我不明白。如果我切换到案例 2(单实例)。如何解决?
    • 您是否在清单中添加了
    • 我更新了答案请使用@Override public boolean dispatchKeyEvent(KeyEvent event) { if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) { //yours code return true; } 否则返回 super.dispatchKeyEvent(event); }
    【解决方案2】:

    试试这个... 从清单中删除启动模式属性,然后从活动 A 调用活动 B 使用finish()方法如下:

    finish();
                Intent intent=new Intent(getApplicationContext(),ActivityB.class);
                startActivity(intent);
    

    【讨论】:

    • 正如我上面所问的。有两种情况:如果我设置 Activity A 的启动模式:singleTask/singleTast/standard,我会从 Activity A 调用 Activity B(没关系)。在活动 B 中,如果我按 Home 键返回主屏幕,则屏幕为空(没有任何东西......)。如何解决?如果我设置 Activity A 启动模式:singleInstance,我从 Activity A 调用 Activity B,然后它显示一个空白屏幕(如何修复它),然后转到 Activity B(在这种情况下,我按 Home 键返回主屏幕,它工作正常)。
    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 2022-01-01
    • 2017-02-27
    • 2020-06-10
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多