Al desarrollar para Android
, puede establecer su sdk objetivo (o mínimo) en 4 (API 1.6) y agregar el paquete de compatibilidad de Android (v4) para agregar soporte para Fragments
. Ayer hice esto y lo implementé Fragments
con éxito para visualizar datos de una clase personalizada.
Mi pregunta es la siguiente: ¿cuál es el beneficio de usar Fragments
en lugar de simplemente obtener una Vista de un objeto personalizado y aún admitir API 1.5?
Por ejemplo, digamos que tengo la clase Foo.java:
public class Foo extends Fragment {
/** Title of the Foo object*/
private String title;
/** A description of Foo */
private String message;
/** Create a new Foo
* @param title
* @param message */
public Foo(String title, String message) {
this.title = title;
this.message = message;
}//Foo
/** Retrieves the View to display (supports API 1.5. To use,
* remove 'extends Fragment' from the class statement, along with
* the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)})
* @param context Used for retrieving the inflater */
public View getView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//getView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//onCreateView
}//Foo
Ambos métodos son muy simples de crear y trabajar en una actividad que, por ejemplo, tiene un List<Foo>
para mostrar (por ejemplo, agregar programáticamente cada uno a ScrollView
), por lo que son Fragments
realmente muy útiles, o son solo una simplificación exagerada de obtener una vista, como a través del código anterior?
Respuestas:
La razón principal para usar Fragments son las funciones de backstack y ciclo de vida. De lo contrario, las vistas personalizadas son más ligeras y más sencillas de implementar.
Al principio, intenté crear una aplicación para teléfono / tableta usando vistas personalizadas. Todo parecía funcionar en teléfonos Y tabletas, incluso cambiando de panel único a panel dividido. Donde me metí en problemas fue con el botón de retroceso y el ciclo de vida. Dado que simplemente estaba actualizando las vistas manualmente ... no había nada que rastreara el historial de vistas y sus estados. Por lo tanto, el botón de retroceso no funcionó como se esperaba y fue difícil recrear incluso el último estado durante los eventos del ciclo de vida, como al rotar la aplicación. Para solucionarlo, tuve que envolver mis vistas personalizadas en fragmentos y usar FragmentManager para que los estados anteriores se guardaran y se recrearan.
Me di cuenta después de responder que publiqué una pregunta similar un año antes: https://stackoverflow.com/a/11126397/618881
fuente
Yo diría que los fragmentos son útiles en dos escenarios: si divide las vistas en algunos dispositivos / orientaciones y las muestra en dos actividades y muestra todo el contenido en una en otros dispositivos. Ese sería un caso de uso si usa una tableta o tal vez incluso en modo horizontal en un teléfono: por ejemplo, muestra la lista de elementos y los detalles en una pantalla. en un teléfono o en modo retrato, solo muestra una parte.
Otro caso de uso son las vistas reutilizables. Entonces, si tiene algunas vistas que son visibles en diferentes actividades y también realiza algunas acciones, puede poner este comportamiento en un fragmento y luego reutilizarlo. Obviamente, probablemente también podrías hacer eso con widgets personalizados.
No vería ninguna razón para usar Fragmentos para cada Vista y supongo que sería solo una sobrecarga. Solo los estoy usando en el primer caso de uso y diría que aquí es una simplificación.
fuente
Aquí puedes leer más.
fuente
El escenario uno es bueno si tiene una aplicación simple.
El escenario dos es bueno si desea tener múltiples Fragmentos y múltiples FragmentActivities y puede combinar cada uno de ellos. También puedes hacer interacción entre fragmentos.
Tengo Fragmentactivity de pantalla dividida, puedo llamarlo con 'Intent Extras' y decirle a fragmentActivity qué fragmento se va a cargar. Los fragmentos son buenos porque no están en manifiesto, por lo que podría hacer fragmentos reutilizables y FragmentActvity.
Pero hace que su proyecto sea más grande. Pero si haces un gran proyecto puedes salvar muchos. Porque puede usar los mismos Fragmentos o la misma actividad de Fragmentos.
Y creo que estos fragmentos llegan un poco tarde, así que debes intentar pensar de una manera nueva. Tal vez solo intente convertir su actividad a FragmentActivity. Más tarde, intente encontrar un código reutilizable y haga un fragmento a partir de él.
Es útil, pero no sé cómo ahora. Pero tengo algunas ideas.
Esto siempre es un problema. Android Team hizo algo y nadie sabe para qué sirve. Porque apenas aprendemos como era y aquí vienen algunas cosas nuevas.
En mi opinión es bueno pero no por la razón que Google nos diga.
fuente
Agregue un caso cuando use Fragmento o Actividad sobre CustomView:
Cuando usa CursorLoader para observar ciertas vistas, ListView o TextView y desea actualizar su valor de visualización cada vez que los datos de su ContentProvider se actualizan en el back-end (el caso más común es que tenga un servicio que actualice su base de datos local sondeando datos de la base de datos remota / nube periódicamente )
fuente
Una cosa importante que no mencionan todos los comentarios anteriores es que un fragmento permanece residente en la memoria incluso si Android elimina la actividad y la reinicia cuando haces algo como cambiar la orientación de tu dispositivo. Esto se hace por motivos de rendimiento, pero también puede dar lugar a resultados inesperados si esperaba que se destruyeran fragmentos solo para descubrir que se están recreando de la nada.
fuente