NavigationDrawer isDrawerOpened всегда возвращает true

Я столкнулся со странной проблемой. Я использую панель навигации из библиотеки поддержки в своем приложении.
Вот макет

   <android.support.v4.widget.DrawerLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linear_layout_main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:visibility="gone" />
    </LinearLayout>

    <ScrollView
        android:id="@+id/layout_drawer_left"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fillViewport="true">

    </ScrollView>

    <ScrollView
        android:id="@+id/layout_drawer_right"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:fillViewport="true" />
</android.support.v4.widget.DrawerLayout>

И я нахожу все представления после настройки просмотра содержимого.

private FrameLayout mLeftDrawerContainer, mRightDrawerContainer;
private DrawerLayout mDrawerMainLayout;
        mDrawerMainLayout = (DrawerLayout) rootBaseView.findViewById(R.id.navigation_drawer);
        mLeftDrawerContainer = (ScrollView) rootBaseView.findViewById(R.id.layout_drawer_left);
        mRightDrawerContainer = (ScrollView) rootBaseView.findViewById(R.id.layout_drawer_right);

Я пробовал много способов закрыть ящик, он закрывает его визуально, я имею в виду, что все в порядке, ящик медленно покидает экран и остается закрытым, но с точки зрения кода он всегда возвращает true.

 protected boolean isDrawersOpened() {
    boolean rightDrawerOpened = mDrawerMainLayout.isDrawerOpen(mRightDrawerContainer);
    boolean leftDrawerOpened = mDrawerMainLayout.isDrawerOpen(mLeftDrawerContainer);
    return  rightDrawerOpened || leftDrawerOpened ;
}

Всегда правда

public void closeDrawer() {
    mDrawerMainLayout.closeDrawer(GravityCompat.END);
    mDrawerMainLayout.closeDrawer(GravityCompat.START);
    mDrawerMainLayout.closeDrawer(mRightDrawerContainer);
    mDrawerMainLayout.closeDrawer(mLeftDrawerContainer);
    mDrawerMainLayout.closeDrawers();
}

Так что это должно работать, но всегда возвращает true.

Если это ошибка в библиотеке поддержки, никаких проблем, я подожду и использую логическую переменную внутри активности, чтобы указать на это, но, возможно, кто-то имел дело с той же проблемой.

Спасибо за любую помощь и идеи заранее.


person CROSP    schedule 14.09.2015    source источник
comment
Вы пробовали проверять по гравитации, а не по просмотрам?   -  person Simas    schedule 14.09.2015
comment
Конечно, я обновил свой вопрос. я пропустил это извините   -  person CROSP    schedule 14.09.2015


Ответы (1)


Извините за невнимательность.
Я допустил ошибку в коде.

   if (hasLeftDrawer) {
        setupLeftDrawer();
    } else {
        mDrawerMainLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mLeftDrawerContainer);
    }
    if (hasRightDrawer) {
        setupRightDrawer();
    } else {
        mDrawerMainLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mRightDrawerContainer);
    }

Должно быть

    if (hasLeftDrawer) {
        setupLeftDrawer();
    } else {
        mDrawerMainLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mLeftDrawerContainer);
    }
    if (hasRightDrawer) {
        setupRightDrawer();
    } else {
        mDrawerMainLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mRightDrawerContainer);
    }
person CROSP    schedule 14.09.2015