风景+导航抽屉动画+新活动= bug?

时间:2014-07-07 21:07:06

标签: android android-fragments

这是发生了什么..从我的导航抽屉我选择一个项目,然后启动一个新的活动。现在问题是我想在打开新活动之前关闭导航抽屉,但是我不希望延迟太长,所以我做的是在调用closeDrawer之后用一个约200ms的postdelayed处理程序启动新活动()。因此,当新活动初始化时,抽屉仍然关闭。当我回到原始活动时,问题就出现了:布局在屏幕的一半左右移动并以奇怪的方式平铺。在你与它交互之前似乎没有得到修复(所以我假设它通过onDraw()调用得到修复)。

使这种情况发生的条件:

  • 设备处于LANDSCAPE模式(在肖像上不会发生)

  • 当调用startActivity()时,导航抽屉会在视图外设置动画

有什么见解?奖金问题:是否有一种简单的方法可以在没有动画的情况下关闭导航抽屉?

编辑:如果我在横向并使用startActivityForResult(),则会发生同样的事情。这不仅仅是startActivity()的问题..

2 个答案:

答案 0 :(得分:0)

在DrawerActivity的onAuthenticatedResume()中,尝试配置DrawerManager&正确切换抽屉。代码看起来像下面的代码片段(我只是添加了一些像'YourDrawerManager'这样的虚拟行,这意味着你拥有的经理)

@Override
    protected void onAuthenticatedResume() {
        super.onAuthenticatedResume();
            //Configure NavigationDrawer
            navigationDrawerManager = new YourDrawerManager();
        mDrawerLayout = (DrawerLayout)findViewById(R.id.your_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.logo, "OK",
                "Close") {

            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle(your_title_string));
                supportInvalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                supportInvalidateOptionsMenu();
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);

        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });

        }
    }

答案 1 :(得分:0)

我已经弄明白了这个问题。

问题在于,在我的AndroidManifest.xml中,我将新活动声明为具有screenOrientation =“portrait”,并且仅在满足某些条件时才为onCreate方法启用方向更改。

我仍然没有100%清楚发生了什么,但似乎设备会尝试在活动更改时旋转到纵向,然后在绘制新活动之前返回横向(因为它在onCreate中启用)然后以某种方式搞砸了之前的活动,这样当我回到它时,它会变得奇怪。

仍然是一个Android错误IMO,但至少我知道它源于现在。

将screenOrientation更改为“landscape”并且现在工作正常(当第一个活动处于纵向状态且第二个活动被锁定到清单中的横向时,不会出现此问题...什么???)