Aprendizaje de Android: fragmentos (fragmento)

1. ¿Qué es la fragmentación?

Fragment es una nueva API introducida después de Android 3.0. Su intención original es adaptarse a tabletas de pantalla grande. Por supuesto, sigue siendo el favorito del diseño de interfaz de usuario de aplicaciones para tabletas, y también agregaremos este Fragment al desarrollo de teléfonos móviles comunes. Podemos considerarlo como una pequeña Actividad, ¡también conocida como fragmento de Actividad!

La siguiente imagen es una imagen procesada de un fragmento correspondiente a un teléfono móvil y una tableta respectivamente.
inserte la descripción de la imagen aquí

2. Cómo utilizar fragmentos

2.1 Fragmento de carga estática

Paso 1:
definir un archivo xml de fragmento

Lo que definí es left_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/button"
        android:text="Button"
        />

</LinearLayout>

Paso 2:
personalice una clase Fragment, debe heredar Fragment o sus subclases, reescribir el método onCreateView(),
llamar a este método: el método inflater.inflate() carga el archivo de diseño de Fragment y luego devuelve el objeto de vista cargado

  • Al heredar Fragment, habrá dos Fragments en diferentes paquetes para que elijamos (como se muestra en la figura siguiente):
    inserte la descripción de la imagen aquí
    uno es androidx.fragment.app.Fragment en la biblioteca de AndroidX y el otro es android.app integrado. .Fragmento del sistema. Aquí elegimos AndroidX Fragment en la biblioteca, porque puede hacer que las características de Fragment sean consistentes en todas las versiones del sistema Android, y el Fragmento integrado del sistema se abandonó en la versión Android 9.0.
//这里的名字就叫LeftFragment
public class LeftFragment extends Fragment {
    
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    
    
        View view=inflater.inflate(R.layout.left_fragment,container,false);
        return view;
    }
}

Paso 3 :
Agregue la etiqueta del fragmento al archivo de diseño correspondiente a la Actividad que necesita cargar el Fragmento. Recuerde, el atributo de nombre es un nombre de clase completo, que debe incluir el nombre del paquete del Fragmento.

<fragment
    android:id="@+id/left_fragment"
    android:name="com.example.fragmenttest.LeftFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

Paso 4: ¡
La actividad llama a setContentView() en el método onCreate() para cargar el archivo de diseño!

2.2 Agregar fragmentos dinámicamente

Proceso de implementación
inserte la descripción de la imagen aquí

2.3 Devolver pila en fragmento

Hemos implementado con éxito la función de agregar fragmentos dinámicamente a la actividad, pero si lo prueba, encontrará que después de agregar un fragmento haciendo clic en el botón, presione la tecla Atrás y el programa saldrá directamente. Si queremos imitar el efecto similar a regresar a la pila, presionar la tecla Atrás para regresar al fragmento anterior, ¿cómo lograrlo?
De hecho, es muy simple: FragmentTransaction proporciona un método addToBackStack (), que se puede usar para agregar una transacción a la pila de retorno y modificar el código en MainActivity, como se muestra a continuación.

private void replaceFragment(Fragment fragment) {
    
    
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.fragment, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

2.4 Gestión de fragmentos y asuntos de fragmentos

inserte la descripción de la imagen aquí

2.5 Interacción entre Fragmento y Actividad

inserte la descripción de la imagen aquí

  1. adquisición de componentes

Fragmento obtiene componentes en Actividad: getActivity().findViewById(R.id.list);
Actividad obtiene componentes en Fragmento (según id y etiqueta): getFragmentManager.findFragmentByid(R.id.fragment1);

  1. Transferencia de datos
    ①La actividad transfiere datos a Fragmento:

    Cree un paquete de datos de paquete en la Actividad, llame a setArguments (paquete) de la instancia de Fragmento para pasar el paquete de datos de Paquete al Fragmento, y luego llame a getArguments en Fragmento para obtener el objeto Paquete y luego analícelo.

    ②Fragmento transfiere datos a Actividad

    1. Defina una interfaz en Fragment, defina un método abstracto en la interfaz y establezca el tipo de parámetro de datos que desea pasar, 2. Luego escriba un
    método abstracto para llamar a la interfaz y pase los datos que se pasarán
    3. Luego ¡Es Actividad, llame al método proporcionado por Fragmento y luego lea los datos al reescribir el método abstracto!

    ③Transferencia de datos entre Fragmento y Fragmento

    Encuentre el objeto de fragmento para recibir datos y llame directamente a setArguments para pasar los datos.
    Por lo general, al reemplazar, es decir, cuando el fragmento salta, los datos se pasan, luego solo necesita llamar a su método setArguments después de inicializar el Fragmento para ser saltado. ¡Simplemente ingrese los datos!
    Si dos Fragmentos necesitan transmitir datos inmediatamente en lugar de saltar, primero debe obtener los datos transmitidos por f1 en la Actividad y luego transmitirlos a f2, que es usar la Actividad como medio.

3. Ciclo de vida del fragmento

3.1 El estado de los fragmentos

  1. Estado de ejecución
    Un fragmento se está ejecutando cuando es visible y su actividad asociada se está ejecutando.
  2. Estado suspendido
    Cuando una actividad entra en estado suspendido (porque se agrega otra actividad que no llena la pantalla en la parte superior de la pila), el fragmento visible asociado con ella entra en estado suspendido.
  3. Estado detenido
    Cuando una actividad ingresa al estado detenido, los fragmentos asociados con ella ingresarán al estado detenido, o los fragmentos se eliminarán de la actividad llamando a los métodos remove() y replace() de FragmentTransaction , pero si la transacción se confirma before Llame al método addToBackStack () y los fragmentos también entrarán en el estado de parada en este momento. En general, los fragmentos que entran en estado detenido son completamente invisibles para el usuario y el sistema puede reciclarlos.
  4. Los fragmentos del estado destruido
    siempre existen adjuntos a la actividad, por lo que cuando la actividad se destruye, los fragmentos asociados con ella entrarán en el estado destruido . O elimine el fragmento de la actividad llamando a los métodos remove() y replace() de FragmentTransaction, pero el método addToBackStack() no se llama antes de que se confirme la transacción, y el fragmento también entrará en el estado de destrucción en este momento.

Existen casi todos los métodos de devolución de llamada en la actividad, pero los fragmentos también proporcionan algunos métodos de devolución de llamada adicionales, así que centrémonos en estas devoluciones de llamada:

  • enAttach(). Se invoca cuando un fragmento está asociado con una actividad.
  • onCreateView(). Se llama cuando se crea una vista (se carga el diseño) para un fragmento.
  • onActivityCreated(). Se llama cuando se garantiza que se debe haber creado la actividad asociada con el fragmento.
  • onDestroyView(). Se llama cuando se elimina la vista asociada con el fragmento.

3.2 El proceso del ciclo de vida.

Por favor agregue una descripción de la imagen.

3.3 Proceso del ciclo de vida bajo operaciones comunes

Cuando Activity carga Fragment , llame a los siguientes métodos a su vez: onAttach -> onCreate -> onCreateView -> onActivityCreated -> onStart ->onResume

②Cuando creamos una Actividad suspendida con estilo de diálogo , u otras, es para hacer visible la Actividad donde se encuentra el Fragmento, pero no para enfocar la Pausa.

③Cuando se cierra el cuadro de diálogo, la Actividad vuelve a centrarse : onResume

④ Cuando reemplazamos Fragment y llamamos a addToBackStack() para agregarlo a la pila trasera onPause -> onStop -> onDestoryView. !¡¡¡Tenga en cuenta que el Fragmento no ha sido destruido en este momento!!!

⑤ Cuando presionamos el botón Atrás en el teclado , Fragment se mostrará nuevamente: onCreateView -> onActivityCreated -> onStart -> onResume

⑥Si después de reemplazar, no se llama al método addToBackStack() para agregar el Fragmento a la pila de actividades antes de confirmar la transacción; o si se sale de la Actividad, el Fragmento finalizará por completo y el Fragmento entrará en el estado de destrucción en Pausa. > onStop - > onDestoryView -> onDestory -> onDetach

Referencia de contenido: "La primera línea de código" - Guo Lin

Supongo que te gusta

Origin blog.csdn.net/The_onion/article/details/126111485
Recomendado
Clasificación