View difference between Paste ID: 9GgC8624 and 7Ughhn5D
SHOW: | | - or go back to the newest paste.
1
//////////////////////////////////////////////
2
// MainActivity (simplified class)
3
//////////////////////////////////////////////
4
5
public class MainActivity extends ActionBarActivity {
6
7
    private NavigationDrawerFragment mNavigationDrawerFragment;
8
9
10
    @Override
11
    protected void onCreate(Bundle savedInstanceState) {
12
        super.onCreate(savedInstanceState);
13
        setContentView(R.layout.activity_main);
14
15
        mNavigationDrawerFragment = (NavigationDrawerFragment)
16
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
17
        mTitle = getTitle();
18
19
        // Set up the drawer.
20
        mNavigationDrawerFragment.setUp(
21
                R.id.navigation_drawer,
22
                (DrawerLayout) findViewById(R.id.drawer_layout));
23
24
        // Show content for the first menu item
25
        // when the app launches.
26
        if (savedInstanceState == null) {
27
            showContentForNavigationDrawerItem(0);
28
        }
29
    }
30
31
    @Override
32
    public boolean onOptionsItemSelected(MenuItem item) {
33-
//        ActionBarDrawerToggle drawerToggle = mNavigationDrawerFragment.getDrawerToggle();
33+
        if (mNavigationDrawerFragment.onOptionsItemSelected(item)) {
34-
//        if (drawerToggle.isDrawerIndicatorEnabled() &&
34+
            return true;
35-
//                drawerToggle.onOptionsItemSelected(item)) {
35+
36-
//            return true;
36+
37-
//        }
37+
38
                FragmentManager fragmentManager = getSupportFragmentManager();
39
                fragmentManager.popBackStack();
40
                fragmentManager.executePendingTransactions();
41
                mNavigationDrawerFragment.toggleDrawerIndicator();
42
                return true;
43
            default:
44
                return super.onOptionsItemSelected(item);
45
        }
46
    }
47
48
    @Override
49
    public void onBackPressed() {
50
        FragmentManager fragmentManager = getSupportFragmentManager();
51
        fragmentManager.executePendingTransactions();
52
        if (fragmentManager.getBackStackEntryCount() < 1) {
53
            super.onBackPressed();
54
        } else {
55
            fragmentManager.executePendingTransactions();
56
            fragmentManager.popBackStack();
57
            fragmentManager.executePendingTransactions();
58
            mNavigationDrawerFragment.toggleDrawerIndicator();
59
        }
60
    }
61
62
}
63
64
//////////////////////////////////////////////
65
// NavigationDrawerFragment (simplified class)
66
//////////////////////////////////////////////
67
68
public class NavigationDrawerFragment extends Fragment {
69
70
    private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
71
72
    private ActionBarDrawerToggle mDrawerToggle;
73
74
    private DrawerLayout mDrawerLayout;
75
    private ListView mDrawerListView;
76
    private View mFragmentContainerView;
77
78
    private int mCurrentSelectedPosition = 0;
79
    private boolean mFromSavedInstanceState;
80
    private boolean mUserLearnedDrawer;
81
82
    public NavigationDrawerFragment() {
83
    }
84
85
    @Override
86
    public void onCreate(Bundle savedInstanceState) {
87
        super.onCreate(savedInstanceState);
88
89
        getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
90
            @Override
91
            public void onBackStackChanged() {
92
                toggleDrawerIndicator();
93
            }
94
        });
95
        mUserLearnedDrawer = mPreferenceHelper.restoreUserLearnedDrawer();
96
97
        if (savedInstanceState != null) {
98
            mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
99
            mFromSavedInstanceState = true;
100
        }
101
    }
102
103
    public void toggleDrawerIndicator() {
104
        int backStackCount = getFragmentManager().getBackStackEntryCount();
105
        boolean enableIndicator = backStackCount == 0;
106
        mDrawerToggle.setDrawerIndicatorEnabled(enableIndicator);
107
    }
108
109
    @Override
110
    public void onActivityCreated(Bundle savedInstanceState) {
111
        super.onActivityCreated(savedInstanceState);
112
        setHasOptionsMenu(true);
113
    }
114
115
    public boolean isDrawerOpen() {
116
        return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
117
    }
118
119
    public void setUp(int fragmentId, DrawerLayout drawerLayout) {
120
        mFragmentContainerView = getActivity().findViewById(fragmentId);
121
        mDrawerLayout = drawerLayout;
122
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
123
124
        ActionBar actionBar = getActionBar();
125
        actionBar.setDisplayHomeAsUpEnabled(true);
126
        actionBar.setHomeButtonEnabled(true);
127
128
        mDrawerToggle = new ActionBarDrawerToggle(
129
                getActivity(),                    /* host Activity */
130
                mDrawerLayout,                    /* DrawerLayout object */
131
                R.drawable.ic_drawer,             /* nav drawer image to replace 'Up' caret */
132
                R.string.navigation_drawer_open,  /* "open drawer" description for accessibility */
133
                R.string.navigation_drawer_close  /* "close drawer" description for accessibility */
134
        ) {
135
            @Override
136
            public void onDrawerClosed(View drawerView) {
137
                super.onDrawerClosed(drawerView);
138
                if (!isAdded()) {
139
                    return;
140
                }
141
                toggleDrawerIndicator();
142
                getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
143
            }
144
145
            @Override
146
            public void onDrawerOpened(View drawerView) {
147
                super.onDrawerOpened(drawerView);
148
                if (!isAdded()) {
149
                    return;
150
                }
151
                mDrawerToggle.setDrawerIndicatorEnabled(true);
152
                if (!mUserLearnedDrawer) {
153
                    // The user manually opened the drawer;
154
                    // store this flag to prevent auto-showing
155
                    // the navigation drawer automatically in the future.
156
                    mUserLearnedDrawer = true;
157
                    mPreferenceHelper.storeUserLearnedDrawer(true);
158
                }
159
                getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
160
            }
161
        };
162
163
        // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
164
        // per the navigation drawer design guidelines.
165
        if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
166
            mDrawerLayout.openDrawer(mFragmentContainerView);
167
        }
168
169
        // Defer code dependent on restoration of previous instance state.
170
        mDrawerLayout.post(new Runnable() {
171
            @Override
172
            public void run() {
173
                mDrawerToggle.syncState();
174
            }
175
        });
176
177
        mDrawerLayout.setDrawerListener(mDrawerToggle);
178
    }
179
180
    @Override
181
    public boolean onOptionsItemSelected(MenuItem item) {
182
        if (mDrawerToggle.isDrawerIndicatorEnabled() &&
183
                mDrawerToggle.onOptionsItemSelected(item)) {
184
            return true;
185
        }
186
        return super.onOptionsItemSelected(item);
187
    }
188
189
}