tutorial studio onattach navegar fragments example entre ejemplo activity android android-fragments

android - studio - Fragmento por defecto del cajón de navegación



navegar entre fragments android studio (6)

Agregue un caso predeterminado en su código de cambio.

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = null; switch (position) { case 0: fragment = new Fragment1(); break; case 1: fragment = new Fragment2(); break; case 2: fragment = new Fragment3(); break; case 3: fragment = new Fragment4(); break; default: fragment = new Fragment1(); break; }

Soy un desarrollador novato y estoy integrando el cajón de navegación en mi aplicación con Android v7 y tengo una pregunta. Cuando inicio la aplicación, el diseño principal es el siguiente:

<?xml version="1.0" encoding="utf-8"?>

<!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/white" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" />

Y esta es mi actividad principal:

drawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = null; switch (position) { case 0: fragment = new Fragment1(); break; case 1: fragment = new Fragment2(); break; case 2: fragment = new Fragment3(); break; case 3: fragment = new Fragment4(); break; } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); drawerList.setItemChecked(position, true); tituloSeccion = opcionesMenu[position]; getSupportActionBar().setTitle(tituloSeccion); drawerLayout.closeDrawer(drawerList); } });

¿Cómo puedo configurar el fragmento predeterminado como el diseño principal de la aplicación? Gracias


No puedes hacerlo en el XML, si eso es lo que quieres decir. Lo haces en el onCreate de tu actividad. Por ejemplo:

if (getFragmentManager().findFragmentById(R.id.content_frame) == null) { selectItem(0); }

donde selectItem es el método que utiliza para seleccionar fragmentos en su cajón, como en el ejemplo de google https://developer.android.com/training/implementing-navigation/nav-drawer.html , y 0 es la posición del fragmento predeterminado.


Ponga esto al final de onCreate () en la actividad principal.

if (savedInstanceState == null) { selectItem(0); }


Prueba esto en oncreate:

Fragment fragment = null; fragment = new HomeFragment(); //HomeFragment= fragment class to launch that FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.screen_area, fragment); fragmentTransaction.commit();


Si está bien que cargue el fragmento predeterminado cada vez que se crea su actividad, puede poner un FragmentTransaction en onCreate()

Parece algo como esto:

@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); tx.replace(R.id.content_frame, new Fragment1()); tx.commit(); }

Si desea una forma más sofisticada de hacer esto (por ejemplo, cambiar a un fragmento diferente cuando vuelve a la actividad principal), puede usar una Intent con extras que determinan el fragmento en onCreate() , donde acaba de colocar su fragmento predeterminado. en el defaultValue por defaultValue al cargar el extra:

int position = getIntent().getIntExtra("position", 1); switch(position){ ... }


Su ayuda está funcionando.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_page); FragmentManager fragmentManager= getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame ,new YourClass()) .commit(); }