Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 抽屉布局在方向更改时丢失状态_Android_Android Orientation_Drawerlayout_Navigation Drawer - Fatal编程技术网

Android 抽屉布局在方向更改时丢失状态

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

我正在从按钮的onClick切换抽屉布局的状态,并禁用其滑动。 这样可以,但当活动改变方向时,抽屉不会保持其状态如果它已打开,它将关闭。甚至在添加android:configChanges=“keyboardHidden | orientation”时也会出现这种情况

我的活动中的代码:

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
将据此设置抽屉状态。我会把我的答案说得更清楚一点。哦,是的,对不起。我的逻辑有点错误。给我一分钟。我会找到答案的。