Siameze
02/05/14, 19:57:57
Buenas! Estoy teniendo un problema cuando intento remplazar un fragment de un contenedor.
Los traslados se hacen todos bien, pero al parecer no se libera la ram que ocupan los views, a pesar de que los limpio todos.
Cuanto apretó back tampoco se limpia nada del fragment, por lo tanto, con dos fragment yendo atrás y adelanto llego a ocupar 70mb de ram rapidísimo, cuando cada fragment no supera los 12mb.
el metodo que uso para pasar de un fragment a otro es este:
FragmentManager fragmentManager = getSupportFragmentManager();
for(int i = 0; i < fragmentManager.getBackStackEntryCount()-1; ++i) {
fragmentManager.popBackStack();
}
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left)
.replace(R.id.container, fr,tag)
.addToBackStack(null)
.commit();tambien tengo esto en el back, para evitar cerrar la app. no se si tendra alguna relacion:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCoun t() > 1) {
super.onBackPressed();
}else if(getSupportFragmentManager().getBackStackEntryCo unt() == 1){
mNavigationDrawerFragment.AbrirNavigationDrawer();
}
// finish();
}
Asi es como trato a todos los fragments:
private ArrayList<ElementoLista> Aelem= new ArrayList<ElementoLista>();
private String mTabla;
private int modoMenu;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Interface para comunicarse con el activity principal.
final Communicator comunicador = (Communicator) getActivity();
//Inicializo el gridview.
final GridView lv = (GridView) getView().findViewById(R.id.lvtragos);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
comunicador.clickEnListaElementos(getTabla(),Aelem .get(position).getId(),(byte) 3);
};
});
final AdaptadorElemLista adaptador = new AdaptadorElemLista(getView().getContext());
lv.setAdapter(adaptador);
setHasOptionsMenu(true);
}
@Override
public void onDestroyView() {
getView().destroyDrawingCache();
super.onDestroyView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_3, container,false);
}si alguien puede ayudarme a solucionar esto, le voy a estar realmente agradecido =)
Mil gracias por leer!
Los traslados se hacen todos bien, pero al parecer no se libera la ram que ocupan los views, a pesar de que los limpio todos.
Cuanto apretó back tampoco se limpia nada del fragment, por lo tanto, con dos fragment yendo atrás y adelanto llego a ocupar 70mb de ram rapidísimo, cuando cada fragment no supera los 12mb.
el metodo que uso para pasar de un fragment a otro es este:
FragmentManager fragmentManager = getSupportFragmentManager();
for(int i = 0; i < fragmentManager.getBackStackEntryCount()-1; ++i) {
fragmentManager.popBackStack();
}
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left)
.replace(R.id.container, fr,tag)
.addToBackStack(null)
.commit();tambien tengo esto en el back, para evitar cerrar la app. no se si tendra alguna relacion:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCoun t() > 1) {
super.onBackPressed();
}else if(getSupportFragmentManager().getBackStackEntryCo unt() == 1){
mNavigationDrawerFragment.AbrirNavigationDrawer();
}
// finish();
}
Asi es como trato a todos los fragments:
private ArrayList<ElementoLista> Aelem= new ArrayList<ElementoLista>();
private String mTabla;
private int modoMenu;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Interface para comunicarse con el activity principal.
final Communicator comunicador = (Communicator) getActivity();
//Inicializo el gridview.
final GridView lv = (GridView) getView().findViewById(R.id.lvtragos);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
comunicador.clickEnListaElementos(getTabla(),Aelem .get(position).getId(),(byte) 3);
};
});
final AdaptadorElemLista adaptador = new AdaptadorElemLista(getView().getContext());
lv.setAdapter(adaptador);
setHasOptionsMenu(true);
}
@Override
public void onDestroyView() {
getView().destroyDrawingCache();
super.onDestroyView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_3, container,false);
}si alguien puede ayudarme a solucionar esto, le voy a estar realmente agradecido =)
Mil gracias por leer!