Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change fragments using Android navigation drawer

I know these types of question have already been here but still I have not found my answer for this question:

  • I have created an application and used navigation drawer that has been created AUTOMATICALLY by the app (AndroidStudio)

Here's what I have:

@Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     mNavigationDrawerFragment = (NavigationDrawerFragment)             getFragmentManager().findFragmentById(R.id.navigation_drawer);     mTitle = getTitle();      // Set up the drawer.     mNavigationDrawerFragment.setUp(             R.id.navigation_drawer,             (DrawerLayout) findViewById(R.id.drawer_layout)); }  @Override public void onNavigationDrawerItemSelected(int position) {     // update the main content by replacing fragments     FragmentManager fragmentManager = getFragmentManager();     fragmentManager.beginTransaction()             .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))             .commit(); }  public void onSectionAttached(int number) {     switch (number) {         case 1:              break;         case 2:              break;         case 3:              break;     } } 

And some more here:

    public static PlaceholderFragment newInstance(int sectionNumber) {         PlaceholderFragment fragment = new PlaceholderFragment();         Bundle args = new Bundle();         args.putInt(ARG_SECTION_NUMBER, sectionNumber);         fragment.setArguments(args);         return fragment;     }      public PlaceholderFragment() {     }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {         View rootView = inflater.inflate(R.layout.fragment_main, container, false);         return rootView;     }      @Override     public void onAttach(Activity activity) {         super.onAttach(activity);         ((MainActivity) activity).onSectionAttached(                 getArguments().getInt(ARG_SECTION_NUMBER));     } } 

I want to display another fragment using the button in navigation drawer. I want to use this code so please do not send me any guides or tutorials making their own drawers..

The question is, what do I put in case 1: case 2: and case 3: in case I want to open another fragment? Thanks.

One more question:

  • How do I add more fragments and transactions? This doesn't work-

    Fragment fragment = new MyFragment1(); Fragment frag = new MyFragment2(); FragmentManager fragmentManager = getFragmentManager(); switch(position) {     case 0:         fragment = new MyFragment1();         break;     case 1:         frag = new MyFragment2();          break; } fragmentManager.beginTransaction()         .replace(R.id.container, fragment).commit(); 
like image 532
user3053246 Avatar asked Dec 17 '13 16:12

user3053246


People also ask

How do you use a navigation drawer?

The drawer icon is displayed on all top-level destinations that use a DrawerLayout . To add a navigation drawer, first declare a DrawerLayout as the root view. Inside the DrawerLayout , add a layout for the main UI content and another view that contains the contents of the navigation drawer.

How do I edit a fragment?

Right-click the desired fragment and choose Edit. The fragment opens in the Fragment Editor, where you can start making changes to the fragment (see Using the Fragment Editor). When finished, click the Save icon (Figure) in the toolbar (or click File, then select Save).


2 Answers

You should just put a switch statement into the onNavigationDrawerItemSelected method.

Something like this should work:

public void onNavigationDrawerItemSelected(int position) {     // update the main content by replacing fragments     Fragment fragment;     FragmentManager fragmentManager = getFragmentManager(); // For AppCompat use getSupportFragmentManager     switch(position) {         default:         case 0:             fragment = new MyFragment1();             break;         case 1:             fragment = new MyFragment2();             break;     }     fragmentManager.beginTransaction()         .replace(R.id.container, fragment)         .commit(); } 

This is just done quickly but I think it should work

like image 76
Dreagen Avatar answered Oct 05 '22 21:10

Dreagen


I solved this problem over inflater:

    @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {         View rootView;         switch(getArguments().getInt(ARG_SECTION_NUMBER)) {             case 1:                 rootView = inflater.inflate(R.layout.fragment_obj_detail, container, false);                 break;             case 2:                 rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);                 break;             case 3:                 rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);                 break;             case 4:                 rootView = inflater.inflate(R.layout.fragment_about, container, false);                 break;             default:                 rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);         }         return rootView;     } 
like image 22
DenisGl Avatar answered Oct 05 '22 20:10

DenisGl