I've a problem with my project. When the user push a button, I generate a new images gallery (not with Gallery class because is deprecated) with a Fragment. When i go to another part of the application, when the user push this button again muy app generate a new images gallery to the right to the previous gallery.
When this button is pressed 3 or 4 times, the app crack because requiere a lot of memory.
My ask is: How can I delete the previous gallery (Fragment) when i press the button the 2 or 3 or 4... time?
I try to do with onPause (call super.onDestroy(), this.onDetach(), ((Object) layoutDinamicoHorizontal).destroyItem() ... on onPause).
My Fragment has a two LinearLayout, one vertical (vertical), and one horizontal(layoutDinamicoHorizontal) and the code is in onActivityCreated:
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutContenedor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:gravity="top|center_horizontal"
android:orientation="vertical">
<HorizontalScrollView
android:id="@+id/ScrollHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:id="@+id/linearLayoutHorizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
Java:
public class FragmentRecommendedWall extends FragmentBase implements Observer {
private static final String PRUEBA_GALERIA = "pruebaGaleria";
private static FragmentRecommendedWall mInstance = null;
JSONArray jsonArrayData;
private int anchoBitmap;
public static FragmentRecommendedWall getInstance() {
return mInstance;
}
private static final int CARD_SLOTS = 30;
private LinearLayout layoutDinamicoHorizontal;
private LinearLayout layoutGlobal;
private HorizontalScrollView scrollView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (mView == null) {
mView = inflater.inflate(R.layout.fragmentrecommendedwall,
container,
false);
}
mView.setAlpha(0.0f);
return mView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mInstance = this;
setUpModels();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(jsonArrayData!=null){
final Resources res = getResources();
// Capturamos el layout horizontal en una variable de tipo LinearLayout
layoutDinamicoHorizontal = (LinearLayout) getView().findViewById(R.id.linearLayoutHorizontal);
layoutGlobal = (LinearLayout) getView().findViewById(R.id.layoutContenedor);
scrollView = (HorizontalScrollView) getView().findViewById(R.id.ScrollHorizontal);
// Creamos un objeto de tipo ImageView
ImageView imageViewDinamicoArriba;
ImageView imageViewDinamicoAbajo;
int j = 0;
for (int i = 0; i < 30; i += 2){
// Creamos un nuevo objeto de la clase ImageView
imageViewDinamicoArriba = new ImageView(getActivity());
imageViewDinamicoAbajo = new ImageView(getActivity());
imageViewDinamicoArriba.setId(i);
imageViewDinamicoAbajo.setId(i+1);
// Calculamos los sp con los pixeles
int paddingLeft = (int) (15 * getResources().getDisplayMetrics().density);
int paddingRight = (int) (15 * getResources().getDisplayMetrics().density);
int paddingTop = (int) (15 * getResources().getDisplayMetrics().density);
int paddingBotom = (int) (15 * getResources().getDisplayMetrics().density);
// Aplicamos un padding a los objetos de la clase ImageView
imageViewDinamicoArriba.setPadding(paddingLeft, paddingRight, paddingTop, paddingBotom);
imageViewDinamicoAbajo.setPadding(paddingLeft, paddingRight, paddingTop, paddingBotom);
Bitmap imagenArriba = null;
Bitmap imagenAbajo = null;
// Asignamos a los objetos Bitmap la imagen. La cogemos del método getTexture
try {
imagenArriba = getTexture(i);
imagenAbajo = getTexture(i+1);
} catch (IOException e) {
e.printStackTrace();
}
// Repetimos las imágenes para que haya 30
if(j < 3){
if(imagenArriba == null && imagenAbajo == null){
i = 0;
j++;
}
}
// Se los pasamos a los objetos
imageViewDinamicoArriba.setImageBitmap(imagenArriba);
try {
imageViewDinamicoArriba.setTag((String) jsonArrayData.getJSONObject(i).get("contentDescription"));
} catch (JSONException e) {
e.printStackTrace();
}
imageViewDinamicoAbajo.setImageBitmap(imagenAbajo);
try {
imageViewDinamicoAbajo.setTag((String) jsonArrayData.getJSONObject(i + 1).get("contentDescription"));
} catch (JSONException e) {
e.printStackTrace();
}
// Hay que duplicar el setOnlickListener. Uno para la imagen de arriba y otro
// para la imagen de abajo
imageViewDinamicoArriba.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("galeria", "Dentro del onClick Imagen: " + v.getTag());
}
});
imageViewDinamicoAbajo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("galeria", "Dentro del onClick Imagen: " + v.getTag());
}
});
LinearLayout vertical = new LinearLayout(getActivity());
vertical.setOrientation(LinearLayout.VERTICAL);
// Añadimos las vistas al objeto vertical
vertical.addView(imageViewDinamicoArriba);
vertical.addView(imageViewDinamicoAbajo);
layoutDinamicoHorizontal.addView(vertical);
}// Fin del for
scrollView.setScrollX(450);
}// End of if(jsonArrayData!=null)
} // End of onActivityCreated
public static void destroy() {
mInstance = null;
}
} // End of Class FragmentRecommendedWall
Thanks a lot