Android: necesito algunas aclaraciones sobre fragmentos, actividades y vistas



Answers

  1. Fragmento es parte de una actividad, que aporta su propia interfaz de usuario a esa actividad. Fragmento se puede pensar como una sub actividad. Donde la pantalla completa con la que el usuario interactúa se llama actividad. Una actividad puede contener fragmentos múltiples. Los fragmentos son principalmente una parte secundaria de una actividad.

  2. Una actividad puede contener 0 o múltiples fragmentos en función del tamaño de la pantalla. Un fragmento se puede reutilizar en actividades múltiples, por lo que actúa como un componente reutilizable en actividades.

  3. Un fragmento no puede existir de forma independiente. Debe ser siempre parte de una actividad. Donde la actividad puede existir sin ningún fragmento en ella.

Question

En Android API 11+, Google lanzó una nueva clase llamada Fragment .

En los videos, Google sugiere que siempre que sea posible ( link1 , link2 ), debemos usar fragmentos en lugar de actividades, pero no explicaron exactamente por qué.

¿Cuál es el propósito de los fragmentos y algunos usos posibles de ellos (que no sean algunos ejemplos de UI que se pueden lograr fácilmente mediante simples vistas / diseños)?

Mi pregunta es sobre fragmentos:

  1. ¿Cuáles son los propósitos de usar un fragmento?
  2. ¿Cuáles son las ventajas y desventajas de usar fragmentos en comparación con el uso de actividades / vistas / diseños?

Preguntas de bonificación:

  1. ¿Puedes dar algunos usos realmente interesantes para los fragmentos? Cosas que Google no mencionó en sus videos?
  2. ¿Cuál es la mejor manera de comunicarse entre fragmentos y las actividades que los contienen?
  3. ¿Cuáles son las cosas más importantes para recordar cuando usas fragmentos? ¿Algún consejo y advertencia de tu experiencia?



Un Fragmento representa un comportamiento o una parte de la interfaz de usuario en una Actividad. Puede combinar múltiples fragmentos en una sola actividad para construir una interfaz de usuario de paneles múltiples y reutilizar un fragmento en múltiples actividades. Puede pensar en un fragmento como una sección modular de una actividad, que tiene su propio ciclo de vida, recibe sus propios eventos de entrada y que puede agregar o eliminar mientras se ejecuta la actividad.

  • puede manipular cada fragmento de forma independiente, como agregarlos o eliminarlos. Cuando realiza una transacción de fragmento de este tipo, también puede agregarla a una pila de respaldo administrada por la actividad: cada entrada de la pila de respaldo en la actividad es un registro de la transacción de fragmento que ocurrió. La pila posterior le permite al usuario revertir una transacción de fragmento (navegar hacia atrás), presionando el botón Atrás.

  • Cuando agrega un fragmento como parte de su diseño de actividad, vive en un grupo de vistas dentro de la jerarquía de vistas de la actividad y el fragmento define su propio diseño de vista. Puede insertar un fragmento en su diseño de actividad declarando el fragmento en el archivo de diseño de la actividad, como un elemento, o desde el código de su aplicación agregándolo a un ViewGroup existente. Sin embargo, no se requiere que un fragmento sea parte del diseño de la actividad; también puede usar un fragmento sin su propia IU como trabajador invisible para la actividad.

  • Por ejemplo: si utilizara NavigationDrawer sin Fragmentos, sería mejor mantener la instancia de NavigationDrawer en una sola Actividad y cuando navegue por la aplicación eligiendo entre los elementos de NavigationDrawer, entonces cada una de las Actividades que se inician no debe implementar el NavigationDrawer, pero en su lugar debe implementar el botón Atrás para volver a la Actividad "Principal" / única en la que se implementó NavigationDrawer.

    Nota: Si desea implementar NavigationDrawer en múltiples actividades, deberá recrear una nueva instancia de NavigationDrawer en cada actividad que desee mostrar.

    Supongo que esto sería una desventaja en comparación con el uso de fragmentos, mientras que si utilizó un fragmento no necesitaría muchas instancias del cajón, solo necesitaría uno.

    Cajón con fragmentos en lugar de actividades

    Si usa NavigationDrawer con Fragments, el cajón debe implementarse en una sola actividad y cuando se selecciona cada elemento del cajón, su contenido se muestra en cada uno de sus propios fragmentos.

  • Comuníquese entre fragmentos a su Actividad : Para permitir que un Fragmento se comunique con su Actividad, puede definir una interfaz en la clase Fragmento e implementarla dentro de la Actividad. El Fragmento captura la implementación de la interfaz durante su método de ciclo de vida onAttach () y puede llama a los métodos de interfaz para comunicarse con la actividad.

    public class YourFragment extends ListFragment {
    OnSelectedListener mCallback;
    
    // Container Activity must implement this interface
    public interface OnSelectedListener {
        public void onItemSelected(int position);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.your_view, container, false);
    }
    
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnSelectedListener");
        }
    }
    
    }...
    

Ahora el fragmento puede entregar mensajes a la actividad llamando al método onItemSelected () (u otros métodos en la interfaz) usando la instancia de mCallback de la interfaz OnSelectedListener.

public static class MainActivity extends Activity
        implements YourFragment.OnSelectedListener{
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }

    public void onItemSelected(int position) {
        // The user selected the headline of an article from the YourFragment
        // Do something here to display that article

        YourFragment yourFrag = (YourFragment)
                getSupportFragmentManager().findFragmentById(R.id.your_fragment);

        if (yourFrag != null) {
            // If your frag is available, we're in two-pane layout...

            // Call a method in the YourFragment to update its content
            yourFrag.updateView(position);
        } else {
            // Otherwise, we're in the one-pane layout and must swap frags...

            // Create fragment and give it an argument for the selected item
            YourFragment newFragment = new YourFragment();
            Bundle args = new Bundle();
            args.putInt(YourFragment.ARG_POSITION, position);
            newFragment.setArguments(args);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);

            // Commit the transaction
            transaction.commit();
        }
    }
}



Un Fragmento es una parte de la interfaz de usuario o comportamiento de una aplicación que se puede colocar en una Actividad que permite un diseño de actividad más modular. No estaría mal si decimos que un fragmento es una especie de subactividad.

Los siguientes son puntos importantes sobre un fragmento:

  1. Un fragmento tiene su propio diseño y su propio comportamiento con sus propias devoluciones de llamadas del ciclo de vida.

  2. Puede agregar o eliminar fragmentos en una actividad mientras se ejecuta la actividad.

  3. Puede combinar múltiples fragmentos en una sola actividad para construir una interfaz de usuario de paneles múltiples.

  4. Un fragmento se puede usar en actividades múltiples.

  5. El ciclo de vida del fragmento está estrechamente relacionado con el ciclo de vida de su actividad de host.

  6. Cuando la actividad está en pausa, todos los fragmentos disponibles en la actividad también se detendrán.

  7. Un fragmento puede implementar un comportamiento que no tiene un componente de interfaz de usuario.

  8. Se agregaron fragmentos a la API de Android 3 en Android 3 (Honeycomb) con API versión 11.

Para obtener más información, visite el sitio oficial, Fragments .




Un fragmento vive dentro de una actividad.

Mientras que una actividad vive en sí misma.




Los fragmentos son de uso particular en algunos casos, como cuando queremos mantener un cajón de navegación en todas nuestras páginas. Puede inflar un diseño de marco con el fragmento que desee y aún tener acceso al cajón de navegación.

Si hubiera utilizado una actividad, habría tenido que mantener el cajón en todas las actividades, lo que genera un código redundante. Este es un uso interesante de un fragmento.

Soy nuevo en Android y todavía creo que un fragmento es útil de esta manera.






Related