2

ボタンのonClickからDrawerLayoutの状態を切り替えて、スワイプを無効にしています。 これは問題なく動作しますが、アクティビティの向きが変わると、引き出しはその状態を保持しません。 開封した場合は閉鎖となります。 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); 
} 

可能な解決策は、私が活動のonConfigurationChangedにDrawerLayoutを再度開くが、私は設定がを変更したとき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

これはまだ 'View'でレイアウトイベントをトリガーしています。ロックモードが設定されている場合、' DrawerLayout'はそれに応じてドロワーの状態を設定します。私はフレーズ私の答えは少し良いよ。 –

+0

ああ、ええ、申し訳ありません。私のロジックは少しです。私には分かります。私は答えを修正します。 –

関連する問題