PDA

Ver la Versión Completa : problema con fragment


Dild0
25/01/14, 20:00:28
buenas tengo un contenedor de fragment en el cual inflo un fragment

El problema es al girar la pantalla se recarga la activdad pero pierdo el control sobre el
Tengo una clase publica dentro de ese fragment para poder llamarla desde el activityfragment funciona la primera vez pero al girar y recargar cmo q pierde su referencia la variable.

public class ListadoActivity extends BaseFragmentActivity {

private ListadoFragment listado = new ListadoFragment();

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listado_container);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);

if (findViewById(R.id.fragment_container) != null) {

if (savedInstanceState != null) {
//listado = getFragmentManager().getFragment(bundle, key)

return;
}

listado.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction().add(R.id.f ragment_container, listado).commit();
getFragmentManager().saveFragmentInstanceState(lis tado);
}
}

@Override
public void onBackPressed() {

if (listado.volver())
super.onBackPressed();

}

}


listado volver() ya no me deja llamarlo porq es como si todas sus variables estuvieran vacias

Arasthel
25/01/14, 22:37:17
Cada vez que se ejecuta el onCreate (en cada rotación) añades un ListadoFragment (siempre el mismo, por lo que veo) al Fragment Manager, no creo que eso sea recomendable. En lugar de .add yo usaría .replace. No sé si eso arreglaría el problema, pero creo que es aconsejable.

Un saludo.

kriogeN
25/01/14, 23:43:33
Creo que deben ser Fragments distintos, si no daría error al hacer el "add", te diría que ya existe en un contexto.

Es un error raro, te digo lo que hago yo y me funciona bien (te lo pongo con mis datos, es copy&paste de un fragmento de mi código)

En el onCreate():

if (savedInstanceState==null)
fragment = new CrearPlanFragment();
else
fragment = (CrearPlanFragment) getSupportFragmentManager().getFragment(savedInsta nceState, "crearplanfragment");
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment, fragment);
ft.commit();

El código del onSaveInstanceState():

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

getSupportFragmentManager().putFragment(outState, "crearplanfragment", fragment);
}

Dild0
25/01/14, 23:58:32
Buenas

Ahora no puedo probar tu codigo kriogen

En cuando a cambiar add por replace puse trazas, lo hice y cierto q ya no me añade un nuevo fragment pero tengo 2 o al menos eso me indican las trazas, cada rotacion hace 2 veces con el add añade una mas a las que ya hay, mañana os comento

Gracias por la ayuda makinas