ListFragment se infla dos veces

Tengo un diseño lineal (layout_container en skeleton.xml) que se infla con un ListFragment (menufragment) cuando se crea la actividad. Luego, cuando el usuario hace clic, este diseño se reemplaza con otro ListFragment (albumsfragment).

El problema es que cuando presiono el botón Atrás, vuelvo al fragmento de menú, pero la lista es dos veces más larga porque se ha llenado nuevamente con los mismos elementos. ¿Cómo podría evitar esto?

Método OnCreate, dentro de la Actividad:

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.skeleton);

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();      
        MenuFragment menufragment = new MenuFragment();  
        fragmentTransaction.add(R.id.layout_container, menufragment, "menufragment");      
        fragmentTransaction.commit();

        }

Método OnClick, dentro de la Actividad:

  public void OnMenuClick() {

AlbumsFragment albumsfragment = new AlbumsFragment(); 
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.layout_container, albumsfragment, "albumsfragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

}

Mi código de clase Fragmento:

public class MenuFragment extends ListFragment{

ArrayList<MenuItem> m_parts = new ArrayList<MenuItem>();

     @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            MenuAdapter m_adapter;

            m_parts.add(new MenuItem ("item1"));
            m_parts.add(new MenuItem ("item2"));
            m_parts.add(new MenuItem ("item3"));
            m_parts.add(new MenuItem ("item4"));


            m_adapter = new MenuAdapter(getActivity(), R.layout.menu_row, m_parts);
            setListAdapter(m_adapter);

Entonces, cada vez que vuelvo de AlbumFragment a MenuFragment, la lista en MenuFragment crece a medida que se agregan nuevamente el elemento 1, el elemento 2, el elemento 3 y el elemento 4.

Intenté agregar el cheque if (savedInstanceState == null) antes de la transacción del MenuFragment pero no cambia nada.

¿Qué debo hacer para que MenuFragment aparezca desde la pila posterior sin que se vuelva a inflar con estos elementos?

Gracias.

preguntado el 12 de junio de 12 a las 18:06

2 Respuestas

Echa un vistazo a la Fragmento de ciclo de vida. onActivityCreated() será llamado cada vez que regrese a unFragment. Intente, en cambio, mover su implementación a onCreate() y eso debería solucionar su problema de duplicación.

Respondido el 12 de junio de 12 a las 18:06

Wow, funciona de hecho si lleno mi ArrayList en onCreate(). Gracias ! - Jecimí

+1. eh, siempre pensé onCreate fue reemplazado por onActivityCreated en un fragmento... Supongo que necesito mirar de nuevo ese diagrama del ciclo de vida. Gracias, aprendí algo nuevo hoy! - Barak

Probablemente también pueda verificar el tamaño de la lista de arreglos y luego borrarla enActivityCreated() antes de completar la lista de arreglos.

     if(m_parts != null && m_parts.size()>0){

        //Clear the contents of the arrayList m_parts

          m_parts.clear();
       }

Y luego agregue los datos a arrayList.

Respondido el 12 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.