Tengo una aplicación simple que tiene dos fragmentos y cuando está en modo horizontal, ambos fragmentos se muestran uno al lado del otro y en retrato muestro el Fragmento A y luego, si seleccionan una opción, comienzan una Actividad que muestra el Fragmento B. Mi problema es cuando estoy en el modo Retrato y muestra el Fragmento B, si el usuario selecciona una opción de menú, quiero actualizar o volver a dibujar la Vista que está asociada con el Fragmento B y no puedo entender cómo hacer que esto funcione. Probé el método getView y el método getLayoutInflater, pero la pantalla no cambia porque creo que estoy creando una nueva vista. También traté de obtener una referencia al Fragmento A pensando que podría llamar a su rutina para construir un nuevo fragmento y reemplazar el Fragmento B, pero no puedo obtener una referencia porque no se muestra. Lo que realmente necesito hacer es forzar el método onCreateView para que se vuelva a llamar para inflar la nueva vista, pero he intentado varios métodos para intentar hacer esto, pero no puedo hacer que se llame nuevamente a onCreateView. ¿Alguna idea sobre cómo hacer esto?Fragmento de fuerza de Android para reconstruir Vista
Respuesta
si el usuario selecciona una opción de menú que desea actualizar o volver a dibujar la vista que se asocia con el fragmento B y no puede entender cómo hacer este trabajo
En onOptionsItemSelected()
, tienen la llamada actividad un método en el fragmento que hace que actualice sus widgets con el nuevo contenido. O bien, haga que la actividad ejecute un FragmentTransaction
para reemplazar el fragmento (si el fragmento se configuró originalmente a través de un FragmentTransaction
).
Usted tendrá que realizar una FragmentTransaction
y utilizar el método de replace()
Esto no debería ser demasiado difícil de hacer, pero la respuesta dependerá del lugar donde se encuentra su menú (es decir, es su llamada onOptionsItemSelected()
nuevo hacia el interior Actividad principal o ¿está en el Fragmento A/B?).
Supongamos, por simplicidad, que su implementación de menú y onOptionsItemSelected()
están en la actividad padre, y desea remodelar los fragmentos en caso de que se elija menú_opción1. Se vería algo como esto:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
//...
switch (item.getItemId()) {
case R.id.menu_option1:
//do something
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
case R.id.menu_option2:
//do something else;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Alternativamente, si su menú es un hijo de uno de sus fragmentos (que debería ser para el bien de un código más reutilizable), a continuación, un método consiste en exigir que la actividad de acogida para implementar una interfaz definida por el Fragmento, que se puede utilizar como una devolución de llamada. Y en la devolución de llamada onOptionsItemSelected()
dentro de su clase de fragmento, simplemente realiza una llamada a este método de devolución de llamada.
Aunque suena como un bocado, solo necesitas hacer un par de cosas. Haga de cuenta que esta es la clase Fragmento
public static class FragmentA extends ListFragment {
OnSelectedListener mListener;
// Container Activity must implement this interface
public interface OnSelectedListener {
public void onSelected();
}
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//This is to ensure that the Activity has implemented the interface we set up above
try {
mListener = (OnSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnSelectedListener");
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
//...
switch (item.getItemId()) {
case R.id.menu_option1:
//do something
getActivity().onSelected();
return true;
case R.id.menu_option2:
//do something else;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
...
}
Luego, en la actividad, que se vería algo como:
public class MainActivity extends Activity implements FragmentA.onSelectedListener{
...
public void onSelected(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
- 1. Cómo fuerza un archivo MAKE a reconstruir un objetivo
- 2. Cómo reconstruir vista en SQL Server 2008
- 3. acceso Fragmento Vista desde onCreate de Actividad
- 4. Android llegar Fragmento anchura
- 5. ¿Agregar vista a un fragmento dinámicamente en Android?
- 6. Android - Establecer fragmento de identificación
- 7. Fuerza GNU make para reconstruir los objetos afectados por definición compilador
- 8. Android - Pantalla de fragmento girar
- 9. Fragmento de Android onCreateView con gestos
- 10. Android Fragmento backStack tema
- 11. Android Fragmento y GetWindow()
- 12. SQLite para vista de tabla personalizada de Android (vista SQL, no vista de Android) discrepancia?
- 13. ¿Es posible actualizar la vista de un fragmento
- 14. Android Fragmento de estado de vista dentro de un huésped pestaña
- 15. teclado de fuerza abierto en android
- 16. Fragmento Android onCreateView frente a onActivityCreated
- 17. establecer el adaptador de vista de lista en un fragmento en android
- 18. Vista de desplazamiento para vista de texto en android
- 19. Usar vista o fragmento en ViewPager
- 20. Fuerza vista de la acción Mostrar barra de búsqueda
- 21. Android: actividad de llamadas desde el fragmento
- 22. Android TabHost dentro del fragmento
- 23. Mida la vista en el fragmento
- 24. Obtener vista de contenedores del fragmento de Identificación del
- 25. Fragmento animación personalizada transacción - Android
- 26. Formulario de fuerza para redibujar?
- 27. Android Eliminar Fragmento y ver desde BackStack
- 28. Android ListView en fragmento ejemplo
- 29. Cómo almacenar en caché una vista de fragmento
- 30. Android: Agregar un fragmento a una actividad
Cuando va a sustituir R.id.your_fragment_id, que están asumiendo que fue declarado en XML . Pero, ¿y si mi fragmento original se construyó programáticamente? –
@IgorGanapolsky esta será la identificación para el contenedor de ese fragmento – dmSherazi