Red de conocimiento informático - Conocimiento sistemático - Hermano Yuan

Hermano Yuan

Encapsule la clase base BaseFragment

Utilice el método de fábrica estático newInstance(...) para obtener la instancia del fragmento.

Guardado del estado del fragmento/restauración del campo

Evite la superposición de vistas de fragmentos causadas por un mal funcionamiento.

Evite el colapso de la fragmentación causado por operaciones asincrónicas (por agregar)

Escuche los eventos de retorno de claves virtuales y físicas en Fragment.

Utilice DialogFragment maximizado para implementar una vista jerárquica flotante (para agregar)

Determine si la página debe usar fragmentos o actividades.

-

2015-01-22 21:40

He actualizado un consejo sobre cómo escuchar el evento de la tecla Intro en Fragmento. Esto es actualmente. La mejor manera para mí.

Respondí algunas preguntas básicas y comunes, por lo que no profundicé en algunas preguntas. Puedes echar un vistazo a otras respuestas, algunas de ellas están muy bien escritas.

Ya sea para usar fragmentos o actividades en escenarios comerciales, también lo mencioné al final de la respuesta. Los tres subproyectos de los proyectos en los que participé (incluidos más de N proyectos en los que no participé, así como las partes en las que miré el código fuente antes de hacer revisiones de código) básicamente usaron Fragmentos para la parte de vista, haciendo el montaje sea más flexible.

Nuestro desarrollo de componentes de documentos de vídeo también se basa en Fragment. Cuando accedemos al elemento, solo necesitamos mantener el diseño y luego los componentes completarán el diseño en forma de fragmentos.

La actividad de fragmentos no significa necesariamente que haya una sola actividad. Nuestro proyecto se divide en LoginActivity, SplashActivity y HomeActivity. Vea mi última respuesta.

Así que creo que no hay duda de si usarlo o no. No podemos negar la conveniencia que aporta simplemente porque los costos de aprendizaje son altos y requieren más atención.

Fragment todavía tiene algunos inconvenientes que he encontrado en el proyecto. Los agregaré mañana.

Gracias por el complemento de @万PB

Suplemento a la respuesta de @面面

Evite la superposición de vistas de fragmentos causadas por un mal funcionamiento.

Las vistas se superponen porque el fragmento tiene una pérdida de memoria.

La creación y destrucción de actividades está completamente administrada por el servidor del sistema (ams), y la fragmentación generalmente implica agregar manualmente un nuevo objeto al servidor del sistema, por lo que hay un problema aquí.

El ciclo de vida del fragmento comienza con la adición y termina con la eliminación. No importa cómo la aplicación cambie, bloquee o recicle el proceso, siempre que no se elimine, el marco de Android creará y restaurará automáticamente el estado fragmentado.

-

2015-01-22 15:20

Cuando estaba a punto de salir a recoger a mi novia y llevarla de regreso a su casa, Descubrí que había superado los 200 me gusta.

Críticas

Respecto a la cuestión de si empaquetar, estoy en Chongqing. ¿Qué tal SF Hermano? !ヽ(?ω)?

Hoy limpié en casa, trapeé el piso, trapeé el piso, limpié la mesa, empaqué los trapos traídos de Fuzhou, bajé a buscar un mensajero y luego fui. Bajamos a la propiedad a buscar un barril de aceite y luego lavamos la ropa.

A partir de esta semana, prepararé la cena para mi novia todos los días (si estoy solo, puedo pedir comida para llevar).

Entonces, si tienes una novia que no está casada, debes pensarlo detenidamente. Mi novia le dijo a mi suegro que estaba teniendo sexo desnudo y mi suegro dejó de hablar en ese momento. ? `ω).

Supongo que esta noche agregaré algunos consejos fragmentarios. Todas son cosas útiles que encuentro en el trabajo y son más adecuadas para principiantes.

Intenta escribir bien esta respuesta y estar a la altura de los 200 me gusta.

-

Gracias por invitarme. Estoy haciendo las maletas. Cuando vea esta pregunta, por favor respóndala.

En primer lugar, la conveniencia que brinda la fragmentación es suficiente para que ignoremos los problemas que puede causar. Muchos problemas son causados ​​por el uso inadecuado de nuestros propios métodos.

Después de todo, en comparación con la Actividad, la creación de un fragmento requiere menos recursos del sistema que la Actividad, pero el control es más flexible.

Los proyectos en los que participé básicamente no usaban Actividad para la visualización de la interfaz de usuario, y esta parte de la responsabilidad se entregó al fragmento.

Los fragmentos generalmente se dividen en dos categorías: un tipo son fragmentos con interfaz de usuario, que se pueden mostrar como páginas y vistas, y el otro tipo son fragmentos sin interfaz de usuario, que generalmente se utilizan para guardar datos.

En cuanto a los problemas superpuestos y múltiples mencionados por el autor de la pregunta, todos se deben a un uso inadecuado. Necesitas usar fragmentos correctamente.

Está bien, olvídalo, tengo que instalar el monitor. Si la entrega se retrasa, estaré fuera del trabajo.

Ya habrá tiempo para sumar.

-Línea separadora.

Después de hacer las maletas, el mensajero aún no ha venido y empezó a llover de nuevo. . . Yo lo escribí primero.

Encapsulación de la clase base BaseFragment

Ejemplo

Por ejemplo, para crear una instancia de una vista, abstraiga un método getLayoutId. La subclase no necesita preocuparse. la operación de creación específica. El padre La clase maneja la creación de vistas. Al mismo tiempo, se llama a una función abstracta

AfterCreate después de la inicialización. Las subclases pueden realizar algunas operaciones de inicialización y también pueden agregar algunos métodos de uso común a la clase base, como ShowToast().

La clase abstracta pública BaseFragment extiende Fragment {

Vista protegida mRootView

@Nullable

@Override

Pública view onCreateView(LayoutInflater inflador, contenedor ViewGroup, paquete saveInstanceState) {

if(null == mRootView){

mroot view = inflate(getLayoutId(), contenedor, false) ;

}

Devolver mRootView

}

@Override

anulación pública en la actividad creada( @ Nullable Paquete saveInstanceState){

super en la actividad creada(savedInstanceState);

después de crear(savedInstanceState);

}

Resumen protegido int getLayoutId();

Nulo abstracto protegido después de crear (estado de instancia guardado del paquete);

}

Gracias @小小米Suplemento, modificado.

Pero antes de regresar al método View onCreateView público, es mejor determinar primero si su mRootView es nulo. Cuando la página se desliza en ViewPager, este método se llamará varias veces, solo úselo directamente después de que pase.

Utilice el método de fábrica estático newInstance(...) para obtener la instancia del fragmento.

Este método de escritura se puede encontrar en el código de Google. La ventaja es que recibe los parámetros exactos y devuelve una instancia de fragmento, lo que evita el problema de no conocer los parámetros requeridos fuera de la clase al crear un fragmento. En desarrollo cooperativo Particularmente útil en.

Además, Fragment recomienda usar setArguments para pasar parámetros y evitar que Fragment llame automáticamente a su propio constructor sin parámetros cuando la pantalla cambia horizontal y verticalmente, lo que provoca la pérdida de datos.

WeatherFragment estático público newInstance(String cityName) {

Bundle args = new Bundle()

args.putString(cityName, "nombre de la ciudad") ;

fragmento de tiempo = nuevo fragmento de tiempo();

fragmento establecer argumentos(args);

Devolver fragmento;

.

Guardado del estado del fragmento/restauración del campo

¡No guardes el estado de la vista en fragmentos!

¡No guardes el estado de la vista en fragmentos!

¡No guardes el estado de la vista en fragmentos!

Para que su código sea más claro y estable, es mejor distinguir entre guardar el estado del fragmento y guardar el estado de la vista.

Si una propiedad pertenece a una vista, no guarde su estado en el fragmento a menos que la propiedad pertenezca al fragmento.

Cada vista personalizada tiene la obligación de guardar estado. Se puede configurar un interruptor para elegir si se guarda como un EditText.

Por ejemplo: android: frozenText="true/false".

La clase pública CustomView extiende la vista{

...

@Override

public Parcelable onSaveInstanceState(){

Bundle Bundle = new Bundle();

//Guarde el estado actual aquí.

Paquete de devolución;

}

@Override

public void onrestoreinstanstancestate(estado parcelable){

super .onRestoreInstanceState(state);

//Restaurar el estado guardado.

}

...

}

Maneja el guardado del estado del fragmento, como guardar los datos obtenidos del servidor.

Cadena privada serverData

@Override

Public void onSaveInstanceState(Bundle outState){

super onsaveinstancestate(out state); /p>

outState.putString("datos ", datos del servidor);

}

@override

anulación pública en la actividad creada (paquete guardado estado de instancia){

super en la actividad creada(savedInstanceState);

datos del servidor = estado de instancia guardado getstring(" datos ");

}

.

Evite la superposición de vistas de fragmentos causadas por un mal uso.

Esta pregunta es muy sencilla.

Al agregar o reemplazar, llame al método con el parámetro de etiqueta y luego agregue un fragmento de la misma etiqueta, el anterior será reemplazado, de modo que no aparecerán varios fragmentos idénticos al mismo tiempo.

La clase pública WeatherFragment extiende Fragmento {

//Etiqueta

Etiqueta de cadena final estática pública = clase de fragmento meteorológico.

Pero para maximizar la reutilización, podemos determinar si saveInstanceState no está vacío en la actividad una vez creada (paquete saveInstanceState).

Si no está vacío, utilice getSupportFragmentManager(). FindFragmentBytag() la encuentra primero. Si se encuentra la instancia, no es necesario crearla nuevamente.

Fragmento de WeatherFragment = nulo

if(savedInstanceState!=null){

fragmento = getSupportFragmentManager(). findFragmentByTag(fragmento meteorológico. etiqueta);

}

if(fragmento == null){

fragmento = fragmento meteorológico nueva instancia(...) ;

}

Escuche los eventos de devolución de claves virtuales y físicas en Fragment.

He visto muchos métodos y este método es el mejor. Configure un OnKeyListener para rootView para escuchar eventos clave.

mrootview . setfocusable(true);

mroot view . setfocusableintouchmode(true);

mRootView.setOnKeyListener(nueva vista.OnKeyListener() {

@Override

onKey pública booleana (Ver v, int keyCode, evento KeyEvent) {

if (keyCode == KeyEvent. KEYCODE_BACK) {

//No es necesario activar la pila de retorno. Puedes hacer otra cosa

getActivity();

Devolver verdadero

}

<. p>Devuelve falso

}

});

Utiliza un DialogFragment maximizado para implementar una vista jerárquica flotante.

Por ejemplo

Si hay una página de lista, como Zhihu, haga clic en el elemento para abrir la página de detalles, puede usar el DialogFragment maximizado para mostrar la página de detalles y No es necesario proporcionar información específica en este momento.

Se puede mostrar ContainerId, porque la página de detalles generalmente llena la pantalla del teléfono móvil, así que simplemente use DialogFragment.

Sin embargo, esta no es una buena práctica. Cuando la tableta está adaptada, como se muestra en la siguiente figura.

La tableta está integrada y el teléfono móvil ocupa todo el espacio.

En este punto, puede simplemente usar fragmentos para implementar la página de detalles para satisfacer las necesidades de integración de las tabletas.

Puede usar un DialogFragment de pantalla completa para empaquetar fragmentos en su teléfono móvil y luego simplemente DialogFragment.show(...).

Como puede ver desde aquí, el uso de Fragment es realmente muy flexible. .

Determina si la página debe utilizar fragmentos o actividades.

Si la página siguiente no requiere demasiados datos de la página anterior, se recomienda usar Actividad para mostrar; de lo contrario, es mejor usar Fragmento (por supuesto, esto no es absoluto).

Por ejemplo, SplashActivity y MainActivity no tienen mucho acoplamiento y se pueden dividir en dos actividades.

PD

Los anteriores son solo algunos de los usos de Fragment, pero pueden satisfacer necesidades de desarrollo comunes.

En realidad, nunca encontré estos obstáculos cuando estaba trabajando en el proyecto. Naturalmente, lo manejé como lo hicieron mis colegas y obtuve muchas cosas que no sabía antes. Pero si lo encuentras, búscalo en Baidu y encontrarás muchas cosas. Hay muy pocos que sean realmente útiles, todos son copiados por ti y por mí.

Otra razón es que la mayoría de la gente en China no tiene la energía, el tiempo o el pensamiento para compartir de manera original, ni tampoco tienen esa atmósfera.

Los fragmentos deben considerarse algo muy básico y están disponibles desde la versión 3.0. ¿Te resulta difícil? No es difícil, pero hay muchas cosas a las que prestar atención. Naturalmente lo sabrás después de usarlo mucho.