Estoy tratando de aprender Fragmentos en Android y a través de varios ejemplos que he encontrado parece ser que existen diferentes formas de hacerlo y yo sólo quería tener algunos consejos en cuanto a cuál es la forma correcta, o al menos en qué circunstancias una forma debe ser utilizado a través de otro.

Un ejemplo, se ha creado un diseño que contenía un fragmento y un FrameLayout. En el código, cuando se selecciona un elemento de la ListFragment se crea un Fragmento nuevo (con algunos datos que requiere en el constructor) y el FrameLayout es sustituido por este nuevo Fragmento (utilizando FragmentTransaction.replace()).

Otro ejemplo tiene un archivo de diseño que declara el 2 fragmentos de lado a lado. Ahora en el código cuando el usuario selecciona un elemento de la lista en un fragmento se realiza una llamada a otro fragmento de la actualización de datos (basado en el elemento seleccionado).

Así que me pregunto si cualquiera de estos métodos es preferido sobre los demás o si hay ciertas circunstancias en las que uno debe usar?

EDIT: aquí está el código para cada uno de los dos métodos me estaba refiriendo a:

1:

        mCurCheckPosition = index;

        if (mDualPane) {
            //We can display everything in-place with fragments, so update
            //the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            //Check what fragment is currently shown, replace if needed.
            DetailsFragment details = (DetailsFragment)
                    getFragmentManager().findFragmentById(R.id.details);
            if (details == null || details.getShownIndex() != index) {
                //Make new fragment to show this selection.
                details = DetailsFragment.newInstance(index);

                //Execute a transaction, replacing any existing fragment
                //with this one inside the frame.
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.replace(R.id.details, details);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        } else {
            //Otherwise we need to launch a new activity to display
            //the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }

2:

public void onListItemClick(ListView l, View v, int position, long id) {
    String item = (String) getListAdapter().getItem(position);
    DetailFragment fragment = (DetailFragment) getFragmentManager()
            .findFragmentById(R.id.detailFragment);
    if (fragment != null && fragment.isInLayout()) {
        fragment.setText(item);
    } else {
        Intent intent = new Intent(getActivity().getApplicationContext(),
                DetailActivity.class);
        intent.putExtra("value", item);
        startActivity(intent);

    }

}
InformationsquelleAutor DaveJohnston | 2012-03-24

1 Comentario

  1. 20

    Así que me pregunto si cualquiera de estos métodos es preferido sobre los demás o si hay ciertas circunstancias en las que uno debe usar?

    Si el fragmento no tiene que cambiar (es decir, es el mismo fragmento de la clase), me gustaría tener la actividad de llamar a un método en que el fragmento en lugar de reemplazarlo (escenario #2), suponiendo que existe. Eso es mucho menos costoso en tiempo de ejecución, y es probablemente la más simple código.

    Si, sin embargo, el fragmento puede ser necesario una diferente (por ejemplo, dependiendo de lo que usted haga clic en, puede haber diferentes fragmentos de diferentes tipos de modelo de objetos representados en la lista), luego de reemplazar el fragmento será necesaria (escenario #1). Usted podría optimizar el caso de que el fragmento sucede para que este evento sea de la misma clase, aunque me gustaría centrarse primero en conseguir trabajo reemplazando el fragmento y la preocupación acerca de la optimización de la si/cuando usted tiene el tiempo y la inclinación.

    Yo no soy un fan de tu #2 código estructuralmente, sin embargo. En mi humilde opinión, los fragmentos no se debe hablar con los otros fragmentos directamente. Mi preferido es el patrón de los fragmentos «se adhieren a su tejido de punto», centrándose únicamente en las cosas dentro de sus propios widgets y modelos. Para los eventos que afectan a otras partes de la interfaz de usuario (por ejemplo, lista de clic), tiene el fragmento de notificar a la actividad (por ejemplo, a través de un agente de escucha de la interfaz). La actividad es el que sabe que los fragmentos se debe a su alrededor, como es el que los creó en el primer lugar. La actividad puede hablar con el otro fragmento (si es que existe), cree que el otro fragmento (si hay espacio), o iniciar otra actividad. Si usted prefiere que su #2 enfoque, son bienvenidos a utilizar, es simplemente no es lo que yo haría en su circunstancia.

Dejar respuesta

Please enter your comment!
Please enter your name here