Android 抽屉布局在方向更改时丢失状态
我正在从按钮的onClick切换抽屉布局的状态,并禁用其滑动。 这样可以,但当活动改变方向时,抽屉不会保持其状态如果它已打开,它将关闭。甚至在添加android:configChanges=“keyboardHidden | orientation”时也会出现这种情况 我的活动中的代码:Android 抽屉布局在方向更改时丢失状态,android,android-orientation,drawerlayout,navigation-drawer,Android,Android Orientation,Drawerlayout,Navigation Drawer,我正在从按钮的onClick切换抽屉布局的状态,并禁用其滑动。 这样可以,但当活动改变方向时,抽屉不会保持其状态如果它已打开,它将关闭。甚至在添加android:configChanges=“keyboardHidden | orientation”时也会出现这种情况 我的活动中的代码: private DrawerLayout drawer; private int drawerLayoutGravity = Gravity.RIGHT; @Override protected void o
private DrawerLayout drawer;
private int drawerLayoutGravity = Gravity.RIGHT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
disableDrawer();
View btnOpenDrawer = findViewById(R.id.btn_open_drawer);
btnOpenDrawer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleDrawerState();
}
});
}
private void toggleDrawerState() {
if (drawer.isDrawerOpen(drawerLayoutGravity)) {
drawer.closeDrawer(drawerLayoutGravity);
} else {
drawer.openDrawer(drawerLayoutGravity);
}
}
/**
* doesn't let the user swipe to open the drawer
*/
private void disableDrawer() {
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
一种可能的解决方案是,我在活动的配置更改的
上重新打开抽屉布局,但我需要避免在配置更改时显示抽屉布局重新打开您正在抽屉上设置关闭锁定模式以禁用刷卡。即使您已禁用了活动
重新创建,方向更改也将在视图
上触发布局事件,并且抽屉布局
将根据布局时的锁定模式设置抽屉状态
无论何时以编程方式打开/关闭抽屉,都需要更新锁定模式
private void toggleDrawerState() {
if (drawer.isDrawerOpen(drawerLayoutGravity)) {
drawer.closeDrawer(drawerLayoutGravity);
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
drawer.openDrawer(drawerLayoutGravity);
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
}
}
虽然您所说的有道理,但在本例中,这不应该是问题所在,因为我使用的是:configChanges=“keyboardHidden | orientation”
,因此在方向更改时不会调用onCreate。谢谢它仍然在您的视图上触发布局事件
s,设置锁定模式后,DrawerLayout
将据此设置抽屉状态。我会把我的答案说得更清楚一点。哦,是的,对不起。我的逻辑有点错误。给我一分钟。我会找到答案的。