android-layout Android - Necesito algunas aclaraciones de fragmentos vs actividades y vistas





6 Answers

  1. El fragmento es parte de una actividad, que aporta su propia IU a esa actividad. Fragmento puede ser pensado como una sub actividad. Cuando la pantalla completa con la que el usuario interactúa se llama actividad. Una actividad puede contener múltiples fragmentos. Los fragmentos son principalmente una parte parcial de una actividad.

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

  3. Un fragmento no puede existir independientemente. Siempre debe ser parte de una actividad. Donde la actividad puede existir sin ningún fragmento en ella.

android android-layout android-fragments android-activity android-3.0-honeycomb

En Android API 11+, Google ha lanzado una nueva clase llamada Fragment .

En los videos, Google sugiere que siempre que sea posible ( link1 , link2 ), deberíamos 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 los mismos (aparte de algunos ejemplos de UI que pueden lograrse fácilmente mediante vistas / diseños simples)?

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 extra:

  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 los fragmentos y las actividades que los contienen?
  3. ¿Cuáles son las cosas más importantes que debes recordar cuando usas fragmentos? ¿Algún consejo y advertencias de su experiencia?



Un Fragmento es una parte de la interfaz de usuario de una aplicación o comportamiento que se puede colocar en una Actividad que permite un diseño de actividad más modular. No estará mal si decimos que un fragmento es un tipo 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 llamada de ciclo de vida.

  2. Puede agregar o eliminar fragmentos de una actividad mientras la actividad se está ejecutando.

  3. Puede combinar varios fragmentos en una sola actividad para crear una interfaz de usuario de varios paneles.

  4. Un fragmento puede ser utilizado en múltiples actividades.

  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 componente de interfaz de usuario.

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

Para más detalles, visite el sitio oficial, Fragments .




Los fragmentos son de uso particular en algunos casos como donde queremos mantener un cajón de navegación en todas nuestras páginas. Puede inflar un diseño de marco con cualquier 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 que hacen para el código redundante. Este es un uso interesante de un fragmento.

Soy nuevo en Android y sigo pensando que un fragmento es útil de esta manera.




Un fragmento representa un comportamiento o una parte de la interfaz de usuario en una actividad. Puede combinar varios fragmentos en una sola actividad para crear una interfaz de usuario de múltiples paneles y reutilizar un fragmento en varias 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 la actividad se está ejecutando.

  • 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 que está gestionada por la actividad; cada entrada de la pila de respaldo de la actividad es un registro de la transacción de fragmento que se produjo. La pila trasera 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 el diseño de su 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 interfaz de usuario 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 seleccionando de los elementos en NavigationDrawer, entonces no se deben implementar cada una de las Actividades que se inician. NavigationDrawer, pero en su lugar debería implementar el botón Atrás para volver a la actividad / actividad "principal" en la que se implementó NavigationDrawer.

    Nota: Si desea implementar NavigationDrawer en varias Actividades, tendría que volver a crear 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 utilizara 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 Fragmentos, 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 Fragmentos.

  • Comuníquese entre el fragmento a su Actividad : Para permitir que un Fragmento se comunique hasta 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 luego puede llamar a los métodos de la 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 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();
        }
    }
}



Fragmentos vive dentro de la Actividad y tiene:

  • su propio ciclo de vida
  • su propio diseño
  • sus propios fragmentos infantiles y etc.

Piense en los fragmentos como una subactividad de la actividad principal a la que pertenece, no puede existir por sí misma y puede ser llamada / reutilizada una y otra vez. Espero que esto ayude :)




Las actividades son los componentes de pantalla completa en la aplicación con la barra de herramientas, todos los demás son preferiblemente Fragmentos. Una actividad principal de pantalla completa con una barra de herramientas puede tener varios paneles, páginas desplazables, cuadros de diálogo, etc. (todos los fragmentos) a los que se puede acceder desde el elemento principal y comunicarse a través del elemento principal.

Ejemplo -

Actividad A, Actividad B, Actividad C -

  • Todas las actividades deben tener el mismo código repetido, por ejemplo, para mostrar una barra de herramientas básica o heredar de una actividad principal (se vuelve complicado de manejar).
  • Para pasar de una actividad a la otra, todos deben estar en la memoria (sobrecarga) o uno debe ser destruido para que la otra se abra.
  • La comunicación entre las actividades se puede hacer a través de intenciones.

vs

Actividad A, Fragmento 1, Fragmento 2, Fragmento 3 -

  • Sin repetición de código, todas las pantallas tienen barras de herramientas, etc. de esa Actividad.
  • Varias formas de pasar de un fragmento al siguiente: ver paginador, panel múltiple, etc.
  • La actividad tiene la mayoría de los datos, por lo que se necesita una comunicación mínima entre fragmentos. Si aún es necesario, se puede hacer a través de interfaces fácilmente.
  • Los fragmentos no necesitan ser de pantalla completa, la carga de flexibilidad en el diseño de ellos.
  • Los fragmentos no necesitan inflar el diseño si las vistas no son necesarias.
  • Varias actividades pueden usar el mismo fragmento.





Related