这是发生了什么..从我的导航抽屉我选择一个项目,然后启动一个新的活动。现在问题是我想在打开新活动之前关闭导航抽屉,但是我不希望延迟太长,所以我做的是在调用closeDrawer之后用一个约200ms的postdelayed处理程序启动新活动()。因此,当新活动初始化时,抽屉仍然关闭。当我回到原始活动时,问题就出现了:布局在屏幕的一半左右移动并以奇怪的方式平铺。在你与它交互之前似乎没有得到修复(所以我假设它通过onDraw()调用得到修复)。
使这种情况发生的条件:
设备处于LANDSCAPE模式(在肖像上不会发生)
当调用startActivity()时,导航抽屉会在视图外设置动画
有什么见解?奖金问题:是否有一种简单的方法可以在没有动画的情况下关闭导航抽屉?
编辑:如果我在横向并使用startActivityForResult(),则会发生同样的事情。这不仅仅是startActivity()的问题..
答案 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”并且现在工作正常(当第一个活动处于纵向状态且第二个活动被锁定到清单中的横向时,不会出现此问题...什么???)