Android Navigation Drawer Fragment State

后端 未结 4 1961
北海茫月
北海茫月 2020-12-14 20:56

I\'m currently utilizing the Navigation Drawer for my Android APP. In my first fragment, I\'ve a fragment that loads data using Facebook\'s Graph API. Thus, when my App is f

4条回答
  •  天命终不由人
    2020-12-14 21:12

    I am using the following code:

    @Override
    public void onNavigationDrawerItemSelected(int position) {
    
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getFragmentManager();
        if(position==0){// selection of tabs content
            fragmentManager
            .beginTransaction()
            .replace(R.id.container,
                    SimulatorFragment.newInstance(position + 1)).commit();
        }else if(position==1){
            fragmentManager
            .beginTransaction()
            .replace(R.id.container,
                    HudFragment.newInstance(position + 1)).commit();
        }else if(position==2){
            // Display the fragment as the main content.
            fragmentManager
            .beginTransaction()
            .replace(R.id.container, 
                    SettingsBasicFragment.newInstance(position +1)).commit();
        }else{
    
        }
    }
    

    You can replace by a new instance the first time and store the fragment, if it is not null, then replace by the stored fragment.

    The activity must implement NavigationDrawerFragment.NavigationDrawerCallbacks

    The fragment constructor and newInstance methods look like this:

    public final class HudFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";
    
    /**
     * Returns a new instance of this fragment for the given section number.
     * @param simulation 
     */
    public static HudFragment newInstance(int sectionNumber) {  
        HudFragment fragment = new HudFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }
    
    public HudFragment() {
    }
    

    To switch fragments by code I use this method inside the NavigationDrawerFragment:

    /**
     * Select a different section
     * @param position
     */
    public void select(int position){
        selectItem(position);
    }
    
    private void selectItem(int position) {
        mCurrentSelectedPosition = position;
        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }            
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }
    }
    

提交回复
热议问题