Search code examples
androiddrawerlayout

DrawerLayout Does not close after rotate the screen


so what i am trying is if the DrawerLayout is open and than i rotated the screen the DrawerLayout should close , but it does not

here is the code

package com.moammedx.learingmaterial;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;

public class NavigationDrwaerFragment extends Fragment {
    public static final String PREF_FILE_NAME = "testpref";
    public static final String KEY_USER_LEARNED_DRAWER = "user_learnd_drawer";

    private View contenerView;
    private ActionBarDrawerToggle mDrawerTolggle;

    private DrawerLayout mDrawerLayout;
    private boolean mUserLearnedDrawer;
    private boolean mFromSavedInstanceState;

    public NavigationDrwaerFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
        if (savedInstanceState != null) {
            mFromSavedInstanceState = true;
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_navigation_drwaer, container, false);
    }


    public void SetUp(int fragmenID, DrawerLayout drawerlayout, Toolbar toolbar) {
        contenerView = getActivity().findViewById(fragmenID);
        mDrawerLayout = drawerlayout;
        mDrawerTolggle = new ActionBarDrawerToggle(getActivity(), drawerlayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                if (!mUserLearnedDrawer) {
                    super.onDrawerOpened(drawerView);
                    mUserLearnedDrawer = true;
                    saveToPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer + "");
                }
                getActivity().invalidateOptionsMenu();

            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActivity().invalidateOptionsMenu();
                Toast.makeText(getActivity(), "onDrawerClosed", Toast.LENGTH_SHORT).show();
            }
        };

        if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
            mDrawerLayout.openDrawer(contenerView);
        }
        if (mFromSavedInstanceState) {
            Toast.makeText(getActivity(), "close now", Toast.LENGTH_SHORT).show();
            mDrawerLayout.closeDrawer(contenerView);
        }
        mDrawerLayout.setDrawerListener(mDrawerTolggle);
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerTolggle.syncState();
            }
        });
    }

    public static void saveToPreferences(Context context, String preferencesName, String preferencesValue) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(preferencesName, preferencesValue);
        editor.apply();
    }

    public static String readFromPreferences(Context context, String preferencesName, String defaultValue) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
        return sharedPreferences.getString(preferencesName, defaultValue);
    }
}

the SetUp method is called from the main activity

In the onCreat i checked of savedInstanceState is exist and later inside the SetUp i used .colseDrawer to close the DrawerLayout , but it does not close , and i added for toast just for test and it show up when i rotate the screen


Solution

  • Will i solve it by adding .closeDrawer in onResume

        public void onResume() {
        super.onResume();
        mDrawerLayout.closeDrawer(contenerView);
    }