Bonjour,
Depuis que j'essaye mon application sur android 2.3.3, elle ne fonctionne plus.
Mon activity possède 2 GridView avec quelques icônes. Et des que je passe d'un "contentview" à un autre 1 fois de trop, j'ai un message d'erreur qui m'a l'air de poser des problèmes à beaucoup de gens au vu de mes recherches :
Donc d'après ma recherche, j'utilise trop de mémoire (O_o), je veux bien, mais j'ai juste un Xml qui défini le GridView et ci-dessous le code de mon adapter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): FATAL EXCEPTION: main 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.content.res.Resources.loadDrawable(Resources.java:1782) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.content.res.Resources.getDrawable(Resources.java:588) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.widget.ImageView.resolveUri(ImageView.java:501) 06-14 01:12:44.414: ERROR/AndroidRuntime(7432): at android.widget.ImageView.setImageResource(ImageView.java:280)
J'avais pour idée de désallouer par un recycle tous les éléments (imageview) du GridView mais je ne vois pas très bien comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class MenuGridViewAdapter extends BaseAdapter { private ArrayList<Integer> idIconList; private Context context; private int screenWidth; public MenuGridViewAdapter(Context c, ArrayList<Integer> list) { context = c; idIconList = list; Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); screenWidth = display.getWidth(); } public int getCount() { return idIconList.size(); } public Object getItem(int item) { return item; } public long getItemId(int arg0) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; // Calcul de la dimension maximum des marges int margin = (int) (screenWidth * 3 / 100); // Calcul de la dimension maximum des icônes int size = (int)((screenWidth - 4 * margin) / 3); if (convertView == null) { imageView = new ImageView(context); imageView.setPadding(margin, margin, margin, margin); imageView.setScaleType(ImageView.ScaleType.FIT_START); imageView.setLayoutParams(new GridView.LayoutParams(size, size)); imageView.setImageResource(idIconList.get(position)); } else imageView = (ImageView) convertView; return imageView; } }
Et puis ça me parait étrange que cela ne soit pas fait automatiquement par le système non ?
Merci d'avance.
Partager