Aller au contenu

Problème Views qui se superposent


Hiruma

Recommended Posts

Bonjour,

Je suis un "nouveau" développeur Android et je rencontre un problème dans l'exécution d'une application "Home".

L'application fonctionne correctement mais lorsque je lance une autre application en utilisant un raccourci que j'ai crée (View personnalisée comprenant une image et un texte, basé sur le sample du SDK Android), il y a un problème. L'application correspondant au raccourci se lance bien mais une fois que je reviens sur mon application Home, il semblerait que le layout se recrée par dessus l'ancien, ce qui donne un problème d'affichage :S

bug_home.png

Cette superposition se fait sur tous les éléments contenus dans le layout principal.

Je ne suis pas vraiment à l'aise avec les différents états d'une activité (onResume, onPause, etc...) mais je pense que c'est à ce niveau là que se situe mon problème. Reste à savoir qu'est-ce qui en est la cause... Je suis ouvert à toute suggestion.

Merci d'avance pour l'aide

onCreate :

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       // Mise en place du Wallpaper
       Drawable defWallpaper = peekWallpaper();
       getWindow().setBackgroundDrawable(defWallpaper);

       // Récupération de la liste des apps à afficher sur le workspace
       xmlParser();
       // Chargement de la liste des applications dans mApplications
       loadSelectedApplications(true);

       // Création de la GridView qui reçoit les View d'applications fournies par l'Adapter
       GridView grid = (GridView) findViewById(R.id.grid);
       grid.setAdapter(new ApplicationsAdapter(this, mApplications));
       grid.setOnItemClickListener(new ApplicationLauncher());

     }

Classe ApplicationsAdapter :

   private class ApplicationsAdapter extends ArrayAdapter {
       //--------------------------- Application Adapter Variables --------------------
       private Rect mOldBounds = new Rect();
       //--------------------- ApplicationsAdapter Constructor -----------------------
       public ApplicationsAdapter(Context context,    ArrayList apps) {
           //super(context, textViewResourceId, objects);
           super(context, 0, apps);
       }

           //------------------- ApplicationsAdapter Methods ---------------------------
       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
           final ApplicationInfo info = mApplications.get(position);

           if (convertView == null) {
               final LayoutInflater inflater = getLayoutInflater();
               convertView = inflater.inflate(R.layout.application, parent, false);
           }

           Drawable icon = info.iconApp;

           if (!info.filtered) {
               int width = 42;
               int height = 42;

               final int iconWidth = icon.getIntrinsicWidth();
               final int iconHeight = icon.getIntrinsicHeight();

               if (icon instanceof PaintDrawable) {
                   PaintDrawable painter = (PaintDrawable) icon;
                   painter.setIntrinsicWidth(width);
                   painter.setIntrinsicHeight(height);
               }

               if (width > 0 && height > 0 && (width < iconWidth || height < iconHeight)) {
                   final float ratio = (float) iconWidth / iconHeight;

                   if (iconWidth > iconHeight) {
                       height = (int) (width / ratio);
                   } else if (iconHeight > iconWidth) {
                       width = (int) (height * ratio);
                   }

                   final Bitmap.Config c =
                           icon.getOpacity() != PixelFormat.OPAQUE ?
                               Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
                   final Bitmap thumb = Bitmap.createBitmap(width, height, c);
                   final Canvas canvas = new Canvas(thumb);
                   canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0));
                   mOldBounds.set(icon.getBounds());
                   icon.setBounds(0, 0, width, height);
                   icon.draw(canvas);
                   icon.setBounds(mOldBounds);
                   icon = info.iconApp = new BitmapDrawable(thumb);
                   info.filtered = true;
               }
           }
           final TextView textView = (TextView) convertView.findViewById(R.id.label);
           textView.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null);
           textView.setText(info.nameApp);

         return convertView;
       }
   }

Lien vers le commentaire
Partager sur d’autres sites

J'ai hésité à le mettre vu la longueur donc j'espérais innocemment que quelqu'un aurait une idée avec un simple screenshot...

J'ai édité mon premier post avec les 2 parties du code qui selon moi sont les plus susceptibles d'en être la cause (le reste servant à remplir un ArrayList d'informations sur les applications installées à partir d'un fichier XML) à savoir le onCreate et la classe qui génère l'adapter de la GridView.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...