Cómo cambiar los fragmentos usando el cajón de navegación de Android

Sé que este tipo de preguntas ya han estado aquí, pero aún no he encontrado mi respuesta para esta pregunta:

  • He creado una aplicación y un cajón de navegación que ha sido creado AUTOMÁTICAMENTE por la aplicación (AndroidStudio)

Esto es lo que tengo:

@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; } } 

Y algo más aquí:

  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)); } } 

Quiero mostrar otro fragmento usando el botón en el panel de navegación. Quiero usar este código así que por favor no me envíes ninguna guía o tutorial que haga sus propios cajones.

La pregunta es, ¿qué poner en el case 1: case 2: y case 3: en caso de que quiera abrir otro fragmento? Gracias.

Una pregunta más:

  • ¿Cómo agrego más fragmentos y transacciones? Esto no funciona-

     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(); 

    }

Debería simplemente poner una instrucción switch en el método onNavigationDrawerItemSelected .

Algo como esto debería funcionar:

 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(); } 

Esto se acaba de hacer rápidamente, pero creo que debería funcionar

inflater este problema sobre el 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; } 

Necesita crear un bloque de switch dentro de onNavigationDrawerItemSelected( ) y usar el código que ya existe para cada case pero con el Fragment correspondiente en lugar de PlaceholderFragment . Ahora contiene una pieza genérica de código para agregar un PlaceholderFragment al diseño, reutilízalo para tus propósitos.

¡La respuesta de DenisGl es la correcta! ¡Usando el miembro de la clase, creado por defecto, puede cambiar entre los diversos componentes del Cajón de navegación! Debes usar el método en CreateView, que está dentro del miembro de la clase PlaceholderFragment. Esta clase se invocará automáticamente en el método onNavigationDrawerItemSelected

Aquí está el ejemplo del código: / ¡ Este método puede dejarse como está! ¡Invoca automáticamente la clase PlaceholderFragment! /

 @Override public void onNavigationDrawerItemSelected(int position) { // update the main content by replacing fragments FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.container, PlaceholderFragment.newInstance(position + 1)) .commit(); } 

Este método, en cambio, donde ingresa el Switch Case :

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = null; rootView = inflater.inflate(R.layout.fragment_home, container, false); switch(getArguments().getInt(ARG_SECTION_NUMBER)) { case 1: rootView = inflater.inflate(R.layout.fragment_home, 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_info, container, false); break; } return rootView; } 

Obviamente, debes llamar al diseño de cada fragmento que nos interese.

Esto funciona al 100%, prueba para verificar!

Funciona en Eclipse IDE

  switch(getArguments().getInt(ARG_SECTION_NUMBER)) { case 1: rootView = inflater.inflate(R.layout.fragment_home, 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_info, container, false); break; } 

en función

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = null; rootView = inflater.inflate(R.layout.fragment_home, container, false); return rootView; }