DrawerLayout перестает работать, когда задний стек фрагментов выталкивается

У меня DrawerLayout подключен к ActionBar с ActionBarDrawerToggle, который перестает работать. Я знаю, что вопрос о том, почему он не открывается, задавался 100 раз, но мой вопрос немного другой. Мой ящик работает! Да, вы нажимаете на гамбургер, и ящик открывается и закрывается, как чемпион...

Проблема в том, что он перестает работать, когда я отклоняю любой фрагмент, который был добавлен в действие. Вот макет деятельности

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/renderer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/activity_root_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        ...header stuff...

        <ViewStub
            android:id="@+id/view_stub"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"/>

        ...footer stuff...

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/left_drawer"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"/>

</android.support.v4.widget.DrawerLayout>

Тогда действие содержит это...

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_layout);  

    mRendererLayout = (DrawerLayout) findViewById(R.id.renderer_layout);

    mDrawerToggle = new ActionBarDrawerToggle(
            this,
            mRendererLayout, 
            R.string.alert_ok,
            R.string.cancel_all
    ) {

        @Override
        public void onDrawerOpened(View drawerView) {
            Log.e("===", "RA.Drawer Opened ");
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            Log.e("===", "RA.Drawer Closed ");
        }
    }; 

    mRendererLayout.addDrawerListener( mDrawerToggle );
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Log.e("===", "RA.onOptionsItemSelected(): ");

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }
}

В нескольких моментах я добавляю различные фрагменты в упражнение с

addFragment( new MyFragment() );

Каждый фрагмент имеет представление с onClick(), которое вызывает

getActivity().getSupportFragmentManager().popBackStack();

Именно в этот момент ящик перестает работать. Фрагмент исчезает, как и ожидалось, и он регистрирует "RA.onOptionsItemSelected()", когда гамбургер щелкают, но "RA.Drawer Opened" больше не регистрируется и ящик не открывается. Это продолжается до тех пор, пока действие не будет возобновлено.

Чтобы усложнить задачу, действие использует ViewStub для замены двух макетов: либо FrameLayout, либо FrameLayout, содержащего ViewPager. Только у последнего есть проблема. Я поменял ViewStub, как это...

ViewStub viewStub = findViewById(R.id.view_stub);
viewStub.setLayoutResource(R.layout.either_layout_here);
viewStub.inflate();

Обмен в этом макете не имеет проблем с ящиком. Он получает фрагмент, добавленный к нему через addFragment():

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Смена месторасположения в этом макете, с другой стороны, имеет проблему...

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</FrameLayout>

Этот элемент не получает фрагмент, добавленный к его content_frame (пока), так как ViewPager обрабатывает его фрагменты. Это действительно единственная разница. По какой-то причине возврат фрагмента обратно в стек ломает кнопку ящика на панели действий.

Я в тупике. Помогите!

0 ответов

Другие вопросы по тегам