【问题标题】:Recreate activity with closed drawer after drawer menu click单击抽屉菜单后重新创建关闭抽屉的活动
【发布时间】:2015-02-13 21:33:03
【问题描述】:

我想在单击导航抽屉菜单后重新创建活动并关闭此抽屉。

我试过这个:

private void drawerItemClicked(int position) {
    drawerLayout.closeDrawer(drawer);
    //...
    recreate();
}

但效果不佳。抽屉开始关闭,但屏幕会黑屏 1 秒,并且活动会在抽屉打开的情况下重新创建。

我必须自己用onSaveInstanceState()处理抽屉状态还是有其他方法?

【问题讨论】:

  • 也尝试把drawerLayout.closeDrawer(drawer);在活动的 OnCreate 中
  • 使抽屉布局和抽屉在范围内全局化
  • @Softcoder 会不会在打开抽屉时弄乱手柄旋转?
  • 看到这个learn2crack.com/2014/06/… ..我希望它有所帮助
  • 尝试通过新 Intent 而非 recreate() 来启动它,然后在启动新 Intent 后调用 finish。

标签: android navigation-drawer


【解决方案1】:

为了确保您干净地重新创建 Activity 而不必担心框架会以意想不到的方式使用recreate() 处理某些事情,您可以通过创建一个新的 Intent 来显式声明一个全新的 Activity 实例。类似的东西

startActivity(new Intent(this, CurrentActivity.class));
finish();

在通过 Intent 启动新 Activity 后调用 finish(),将完成底层(暂停状态)Activity。这将实质上“重新创建”您的 Activity。

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但也许我的解决方案对其他人有用。我今天遇到了同样的问题。

    显然问题是在重新创建活动时框架还没有完全关闭导航抽屉。因此,我将 recreate() 调用移至 onDrawerClosed 侦听器,如下所示:

    public void onDrawerClosed(View view) {
        super.onDrawerClosed(view);
        //...
        if(...)
            recreate();
    }
    

    它工作得很好,当 Activity 重新启动时,抽屉保持不动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多