java - llamar - navegar entre fragments android studio
Si declaro un fragmento en un diseño XML, ¿cómo lo transfiero a un paquete? (4)
Ahora que mi Actividad es solo una envoltura alrededor de un Fragmento que hace el mismo trabajo, ¿cómo puedo obtener ese paquete para el Fragmento si declaro el fragmento en XML con la etiqueta?
No puedes.
Sin embargo, puede invocar findFragmentById()
en su FragmentManager
para recuperar el fragmento después de la inflación y luego llamar a algún método del fragmento para asociar datos con él. Aunque aparentemente no se puede establecer en setArguments()
, su fragmento podría organizar retener los datos en sí más allá de un cambio de configuración por otros medios ( onSaveInstanceState()
, setRetainInstance(true)
, etc.).
Tengo una actividad que he reemplazado con un fragmento. La actividad incluía un Intento que contenía información adicional sobre los datos que debía mostrar la actividad.
Ahora que mi Actividad es solo una envoltura alrededor de un Fragmento que hace el mismo trabajo, ¿cómo puedo obtener ese paquete para el Fragmento si declaro el fragmento en XML con la etiqueta?
Si tuviera que usar FragmentTransaction para poner el Fragment en un ViewGroup, tendría la oportunidad de pasar esta información junto con el constructor de Fragment, pero me pregunto sobre la situación en la que el fragmento está definido en XML.
La única solución que veo es no usar los argumentos como canal de intercambio de datos. En cambio, crea tu fragmento para obtener la información necesaria de otro lado. Devolver la llamada para obtener la actividad adecuada, consultar una memoria de almacenamiento temporal, un objeto Singleton, etc.
Otra solución que puede ser útil es emplear marcos que permitan a los objetos no relacionados intercambiar mensajes a través del patrón de diseño de Mediator, como Otto .
No es una forma encapsulada, pero terminé "tirando" del paquete de la actividad principal:
Bundle bundle = getActivity().getIntent().getExtras();
Otra opción es no declarar el fragmento en el XML. Sé que no es exactamente lo que quieres hacer. Sin embargo, puede declarar un diseño simple en su vista de esta manera:
<LinearLayout
android:id="@+id/fragment_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
Y luego, en su clase de Activity
inflará programáticamente el diseño con el fragmento. De esta manera puede pasar los parámetros usando args.
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment fragment = MyFragment.newInstance();
Bundle args = new Bundle();
args.putInt(Global.INTENT_INT_ROLE, 1);''
fragment.setArguments(args);
fragmentTransaction.add(R.id.fragment_container, fragment, "MyActivity");
fragmentTransaction.commit();
Este enfoque no es tan simple y limpio como declararlo en el xml, sin embargo, me he movido a él ya que te da mucho más control sobre el fragmento.