package com.cjj.nices.fragment; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.cjj.nices.activity.MainActivity; import com.cjj.nices.activity.R; import com.cjj.nices.adapter.NavigationDrawerAdapter; import com.cjj.nices.callback.NavigationDrawerCallbacks; import com.cjj.nices.model.NavigationItem; /** * 侧拉menu 类 * @author cjj */ @SuppressLint("NewApi") public class NavigationDrawerFragment extends Fragment implements NavigationDrawerCallbacks { private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; private static final String PREFERENCES_FILE = "my_app_settings"; //TODO: change this to your file private NavigationDrawerCallbacks mCallbacks; private RecyclerView mDrawerList; private View mFragmentContainerView; private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mActionBarDrawerToggle; private boolean mUserLearnedDrawer; private boolean mFromSavedInstanceState; private int mCurrentSelectedPosition; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); mDrawerList.setLayoutManager(layoutManager); mDrawerList.setHasFixedSize(true); final List<NavigationItem> navigationItems = getMenu(); NavigationDrawerAdapter adapter = new NavigationDrawerAdapter(navigationItems); adapter.setNavigationDrawerCallbacks(this); mDrawerList.setAdapter(adapter); selectItem(mCurrentSelectedPosition); return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mUserLearnedDrawer = Boolean.valueOf(readSharedSetting(getActivity(), PREF_USER_LEARNED_DRAWER, "false")); // if (savedInstanceState != null) { // mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); // mFromSavedInstanceState = true; // } } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mCallbacks = (NavigationDrawerCallbacks) activity; } catch (ClassCastException e) { throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); } } public ActionBarDrawerToggle getActionBarDrawerToggle() { return mActionBarDrawerToggle; } public void setActionBarDrawerToggle(ActionBarDrawerToggle actionBarDrawerToggle) { mActionBarDrawerToggle = actionBarDrawerToggle; } public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { mFragmentContainerView = getActivity().findViewById(fragmentId); mDrawerLayout = drawerLayout; mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (!isAdded()) return; getActivity().invalidateOptionsMenu(); // MainActivity.instance.getSupportActionBar().setTitle(getActivity().getString(R.string.app_name)); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); if (!isAdded()) return; if (!mUserLearnedDrawer) { mUserLearnedDrawer = true; saveSharedSetting(getActivity(), PREF_USER_LEARNED_DRAWER, "true"); } getActivity().invalidateOptionsMenu(); } }; if (!mUserLearnedDrawer && !mFromSavedInstanceState) mDrawerLayout.openDrawer(mFragmentContainerView); mDrawerLayout.post(new Runnable() { @Override public void run() { mActionBarDrawerToggle.syncState(); } }); mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); } public void openDrawer() { mDrawerLayout.openDrawer(mFragmentContainerView); } public void closeDrawer() { mDrawerLayout.closeDrawer(mFragmentContainerView); } @Override public void onDetach() { super.onDetach(); mCallbacks = null; } public List<NavigationItem> getMenu() { List<NavigationItem> items = new ArrayList<NavigationItem>(); items.add(new NavigationItem(getActivity().getString(R.string.home), getResources().getDrawable(R.drawable.biz_navigation_tab_news))); items.add(new NavigationItem(getActivity().getString(R.string.favorite) ,getResources().getDrawable(R.drawable.biz_navigation_tab_pics))); items.add(new NavigationItem(getActivity().getString(R.string.messages), getResources().getDrawable(R.drawable.biz_navigation_tab_ties))); items.add(new NavigationItem(getActivity().getString(R.string.support), getResources().getDrawable(R.drawable.biz_navigation_tab_voted))); return items; } void selectItem(int position) { mCurrentSelectedPosition = position; if (mDrawerLayout != null) { mDrawerLayout.closeDrawer(mFragmentContainerView); } if (mCallbacks != null) { mCallbacks.onNavigationDrawerItemSelected(position); } ((NavigationDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position); } public boolean isDrawerOpen() { return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mActionBarDrawerToggle.onConfigurationChanged(newConfig); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); } @Override public void onNavigationDrawerItemSelected(int position) { mCallbacks.onNavigationDrawerItemSelected(position); selectItem(position); } public DrawerLayout getDrawerLayout() { return mDrawerLayout; } public void setDrawerLayout(DrawerLayout drawerLayout) { mDrawerLayout = drawerLayout; } public static void saveSharedSetting(Context ctx, String settingName, String settingValue) { SharedPreferences sharedPref = ctx.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(settingName, settingValue); editor.apply(); } public static String readSharedSetting(Context ctx, String settingName, String defaultValue) { SharedPreferences sharedPref = ctx.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); return sharedPref.getString(settingName, defaultValue); } }