Cómo utilizar la ventana múltiple de fragmentación de Android
Para ejemplos de fragmentos, consulte el Manual de aprendizaje de Android, un total de 9 capítulos y 108 ejemplos. Si solo mira los archivos fuente, todos los ejemplos son interactivos y operables.
? El código fuente adopta la estructura de directorios de Android Studio, resalta el código y el documento se muestra con un diagrama de estructura del documento, que se puede ubicar rápidamente. Descargue desde 360 Mobile Assistant, hay un caparazón en el ícono.
Android se ejecuta en una variedad de dispositivos, incluidos teléfonos de pantalla pequeña, tabletas de pantalla grande e incluso televisores. En vista de la diferencia en el tamaño de la pantalla, en muchos casos primero se desarrolla una aplicación para el teléfono móvil, luego se hace una copia y se modifica el diseño para que se ajuste a la pantalla grande de la tableta Shenma. ¿No se puede adaptar una misma App tanto a móviles como a tablets? Por supuesto. La aparición de fragmentos soluciona este problema. Puedes pensar en los fragmentos como componentes de una interfaz para una actividad, o incluso como la interfaz de una actividad compuesta enteramente por diferentes fragmentos. Lo que es aún más interesante es que el fragmento tiene su propio ciclo de vida para recibir y procesar eventos del usuario. No es necesario escribir un montón de código para manejar eventos para los controles en la Actividad. Además, puedes agregar, reemplazar y eliminar un segmento dinámicamente.
2. El ciclo de vida de los fragmentos
Los fragmentos deben existir en dependencias y actividades, por lo que el ciclo de vida de las actividades afectará directamente al ciclo de vida de los fragmentos. Esta imagen en el sitio web oficial ilustra la relación entre los dos ciclos de vida:
Puedes ver que, además de Activity, Fragment tiene varios métodos de devolución de llamada de ciclo de vida adicionales:
onAttach(Activity )
Se llama cuando el fragmento está asociado con la actividad.
onCreateView(LayoutInflater, ViewGroup, Bundle)
Crea la vista del fragmento.
onActivityCreated(bundle)
Se llama cuando regresa el método onCreate de la actividad.
onDestoryView()
Corresponde a onCreateView y se llama cuando se elimina la vista de fragmento.
onDetach()
Corresponde a onAttach y se llama cuando se cancela la asociación entre el fragmento y la actividad.
Nota: Excepto onCreateView, si anula todos los demás métodos, debe llamar a la clase principal para implementar el método.
3. Uso estático de fragmentos
Jaja, finalmente úsalo ~ ~
Esta es la forma más sencilla de usar Fragmento. Está escrito directamente como un fragmento ordinario. control. En el archivo de diseño de la actividad. Pasos:
1. Heredar Fragment y anular onCreateView para determinar el diseño de Fragment.
2. Declare este fragmento en la actividad, como una vista normal.
El siguiente es un ejemplo (uso dos fragmentos como diseño de la actividad, un fragmento para el diseño del título y un fragmento para el diseño del contenido):
Archivo de diseño de TitleFragment:
[html]¿Ver impresión de texto sin formato?
<? ¿xml? versión="1.0 "? codificación = "utf-8"? & gt
& ltRelativeLayout? xmlns:Android = "/apk/RES/Android "
Android:layout _ width = " match _ parent "
android:layout_height="45dp "
Android:fondo = "@drawable/title_bar"? & gt
& ltImageButton
Android:id = " @+id/id _ title _ left _ BTN "
Android:layout _ width = " wrap _ content "
Android:layout _ height = " wrap _ content "
Android:layout _ center vertical = " true "
android:layout_marginLeft=" 3dp "
Android:background = " @ drawable/show left _ selector "? /& gt;
& ltVista de texto
Android:layout _ width = " fill _ parent "
Android:layout _ height = " fill _ parent "
Android:gravity="center"
Android:text="No soy WeChat"
android:textColor="#fff "
android:textSize="20sp "
android:textStyle="bold "? /& gt;
& lt/diseño relativo & gt;
& lt? versión xml = "1.0" codificación = "utf-8"? & gt
& ltdiseño relativo xmlns:Android = "/apk/RES/Android "
Android:layout _ width = " match _ parent "
android :layout_height="45dp "
Android:background = " @ drawable/title _ bar " & gt;
& ltImageButton
Android:id = " @ +id/id _ title _ left _ BTN "
Android:layout _ width = " wrap _ content "
Android:layout _ height = " wrap _ content "
Android:layout _ center vertical = " true "
android:layout_marginLeft="3dp "
>Android:fondo = " @ drawable/show left _ selector "/& gt
& ltVista de texto
Android:layout _ width = " fill _ parent "
Android:layout _ height = " fill _ parent "
Android: gravitation = "center"
Android:text= "No soy WeChat"
android:textColor="#fff "
android:textSize="20sp "
Android:text style = " negrita "/& gt;
</relative layout>
Fragmento de título
[java] ¿Ver impresión de copia simple?
¿Paquete? com . zhy . zhy _ fragmentos;
¿Importar? Android.app.fragment;
¿Importar? Paquete de sistema operativo Android;
¿Importar? Android.view.layoutinflater;
¿Importar? Android.view.view;
¿Importar? Vista de Android. Vista al hacer clic en el oyente;
¿Importar? Vista de Android. Grupo de vistas.
¿Importar? Android.widget.imagebutton;
¿Importar? Widget de Android. Tostada;
¿Público? ¿clase? TítuloFragmento? ¿extender? Fragmento
{
¿Privado? ¿Botón de imagen? mLeftMenu
@cover
¿Público? ¿Punto de vista? onCreateView(LayoutInflater?Inflater?ViewGroup?Container,
Bundle?savedInstanceState)
{
¿Ver? ¿Punto de vista? =?inflador.inflate(r.layout.fragment_title,?contenedor,?false);
mLeftMenu? =?(Botón Imagen)? ver . findviewbyid(r . id . id _ título _ izquierda _ BTN
mLeftMenu.setOnClickListener(new?OnClickListener()
{
@override);
¿Público? OnClick(Ver? Cinco)
{
Toast.makeText(getActivity(),
"¿Yo? ¿Yo? ¿ImageButton??",
¿Brindis?
show();
}
});
¿Volver? Ver;
}
}
Paquete com.zhy.zhy_fragments;
Importar Android.app.fragment;
p>
Importar Android.OS.bundle;
Importar Android.view.layoutinflater;
Importar Android.view.view;
Importar vista de Android.
Importar widget de imagen de Android. brindis;
Clase pública TitleFragment extiende fragmento
{
Botón de imagen privada mLeftMenu
@Override
Público. ver onCreateView( LayoutInflater inflador, contenedor ViewGroup,
paquete saveInstanceState)
{
vista vista = inflar . );
mle ftmenu =(ImageButton)view . findviewbyid(r . id . id _ title _ left _ BTN
mLeftMenu.setOnClickListener(new OnClickListener()
{
@override
public void onClick(view v)
{
Toast.makeText(getActivity() ,
"¡Soy el ImageButton en TitleFragment!",
Brindis.
show();
}
});
Volver a ver;
}
}< / p>
Del mismo modo, existen archivos de diseño para ContentFragment:
[html] ¿Ver impresión de texto sin formato?
<? ¿xml? versión="1.0 "? codificación = "utf-8"? & gt
& ltLinearLayout? xmlns:Android = "/apk/RES/Android "
Android:layout _ width = " match _ parent "
Android:layout _ height = " match _ parent " p>
android:orientación="vertical "? & gt
& ltVista de texto
Android:layout _ width = " fill _ parent "
Android:layout _ height = " fill _ parent "
Android:layout _ height = " fill _ parent "
p>
Android:gravity="center"
Android:text="Usar fragmento como panel principal"
android:textSize="20sp "
android:textStyle="negrita "? /& gt;
& lt/diseño lineal & gt;
& lt? versión xml = "1.0" codificación = "utf-8"? & gt
& ltlinear design xmlns:Android = "/apk/RES/Android "
Android:layout _ width = " match _ parent "
Android :layout_height = "match_parent"
Android:orientation = "vertical">
<text view
Android:layout_width = " fill _ parent "
Android:layout _ height = " fill _ parent "
Android:gravity="center"
Android:text=" Usar fragmento como panel principal"
android:textSize="20sp "
Android:text style = " negrita "/& gt;
& lt/diseño lineal>
[java] ¿Ver impresión de copia normal?
¿Paquete? com . zhy . zhy _ fragmentos;
¿Importar? Android.app.fragment;
¿Importar? Paquete de sistema operativo Android;
¿Importar? Android.view.layoutinflater;
¿Importar? Android.view.view;
¿Importar? Vista de Android. Grupo de vistas;
¿Público? ¿clase? ¿Fragmento de contenido? ¿extender? Fragmento
{
@cover
¿Público? ¿Punto de vista? onCreateView(LayoutInflater?Inflador?ViewGroup?Contenedor,
Paquete?savedInsta
nceState)
{
¿Volver? inflador.inflate(r.layout.fragment_content,?container,?false);
}
}
paquete com.zhy.zhy_fragments ;
Importar Android.app.fragment;
Importar Android.OS.bundle;
Importar Android.view.layoutinflater;
Importar vista de Android. . view;
Importar vista de Android . grupo de vistas;
Fragmento de extensión ContentFragment de clase pública
{
@ Override
Vista pública enCreateView(LayoutInflater inflador, contenedor ViewGroup,
Paquete guardadoInstanceState)
{
Devolver inflador (r . diseño . fragment_content, contenedor, falso);
}
}
Actividad principal
[java] Ver copia normal ¿Imprimir?
¿Paquete? com . zhy . zhy _ fragmentos;
¿Importar? Android.app.activity;
¿Importar? Paquete de sistema operativo Android;
¿Importar? Ventana de vista de Android;
¿Pública? ¿clase? ¿Evento principal? ¿extender? Actividad
{
@override
¿Protegido? ¿Vacío? onCreate(bundle?savedInstanceState)
{
super oncreate(savedInstanceState);
requestWindowFeature(window.feature_number_title);
setContentView (r . diseño . actividad _ principal);
}
}
Paquete com . zhy _ fragmentos
Importar. Android.app.activity;
Importar Android.OS.bundle;
Importar Android.view.window;
La clase pública MainActivity extiende la actividad
{
@override
protected void onCreate(Estado de instancia guardado del paquete)
{
super .oncreate(savedInstanceState);
solicitarWindowFeature(window.
feature_number_title);
setContentView(r . diseño . actividad _ principal
}
}
Archivo de diseño activo: p>
[java]¿Ver impresión de copias normal?
& ltRelativeLayout? xmlns:Android = "/apk/RES/Android "
xmlns:tools="/tools "
Android:layout _ width = " match _ parent "
Android:layout_height = "match_parent"? & gt
& lt fragment
Android:id = " @+id/id _ fragment _ title "
Android:name = " com . zhy . zhy_fragments. Fragmento de título "
Android:layout_width = "fill_parent"
android:layout_height="45dp"? /& gt;
& lt fragmento
Android:layout _ debajo = " @ id/id _ fragmento _ título "
Android:id = " @ +id/id _ fragment _ content "
Android:name = " com . zhy _ fragments content fragment"
Android:layout _ width = " fill _ parent "
Android:layout_height = "fill_parent"? /& gt;
& lt/diseño relativo & gt;