2

Я переключаю состояние DrawerLayout с кнопки onClick и отключая его прокрутку. Это работает нормально, но когда активность меняет ориентацию, ящик не сохраняет свое состояние; если он был открыт, он будет закрыт. Это даже случается, добавляя android:configChanges="keyboardHidden|orientation".DrawerLayout теряет состояние при изменении ориентации

код в моей деятельности:

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); 
} 

Возможное решение состоит в том, что я вновь открыть DrawerLayout на данный вид деятельности onConfigurationChanged, но мне нужно избегаем отверстие повторно DrawerLayout, когда изменения конфигурации.

ответ

3

Вы устанавливаете режим закрытой блокировки на ящике, чтобы отключить прокрутку. Даже если вы отключили повторное создание Activity, изменение ориентации вызовет событие макета на вашем View с, а DrawerLayout установит состояние ящика в соответствии с режимом блокировки при прокладке.

Вам необходимо обновить режим блокировки всякий раз, когда вы программно открываете/закрываете ящик.

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); 
    } 
} 
+0

Хотя то, что вы говорите, имеет смысл, в данном случае это не должно быть проблемой, так как я использую ': configChanges =«keyboardHidden | ориентации»', поэтому OnCreate не вызывается на ориентации изменение. Благодаря! – RominaV

+0

Он по-прежнему вызывает событие макета на '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' и ' Я немного поправлю свой ответ. –

+0

О, да, извините. Моя логика немного ушла. Дайте минуту. Я исправлю ответ. –

Смежные вопросы