2017-09-05 5 views
1

J'ai une application Android qui devrait afficher les annonces, ces publicités sont tirées du serveur, puis ils sont enregistrés sur le téléphone, j'ai fait une méthode qui devrait afficher des annonces, mais malheureusement, ça ne fonctionne pas comme s'y attendait afficher la première image pendant une longue période, puis il passe en boucle sur les i trop vite ne sais pas pourquoi
ici est ma méthodeimage Switcher ne fonctionne pas correctement

private void startShowAds(final ArrayList<Ad> adArrayList) { 
    Handler handler = new Handler(); 
    for (int i = 0; i < adArrayList.size(); i++) { 
     Ad ad = adArrayList.get(i); 
     Runnable runnable = new Runnable() {   
      public void run() { 
       imageView.setBackgroundDrawable(getBitMap(ad.getFileUri())); 
       handler.postDelayed(this, ad.getDuration()); 
      } 
     }; 
     handler.postDelayed(runnable, ad.getDuration()); 
    } 
    startShowAds(dbHelper.getAllAdRecords(longitude, latitude)); 
} 

toute aide sera appréciée

+0

Dans la boucle for, vous devez corriger les décalages pour les retards. Aussi quel est le point du «je» dans le runnable? –

+0

édité Désolé j'étais par erreur –

Répondre

1

Essayez ceci:

private void startShowAds(final ArrayList<Ad> adArrayList) { 
    Handler handler = new Handler(); 
    long offset = 0; 
    for (int i = 0; i < adArrayList.size(); i++) { 
     Ad ad = adArrayList.get(i); 
     Runnable runnable = new Runnable() { 
      public void run() { 
       imageView.setBackgroundDrawable(getBitMap(ad.getFileUri()));; 
      } 
     }; 
     handler.postDelayed(runnable, offset); 
     offset += ad.getDuration(); 
    } 
} 
+0

semble génial cela fonctionne parfaitement, j'ai un petit problème maintenant comment pourrais-je répéter cette méthode pour plusieurs fois –

+0

en dehors de la boucle pour vous pourriez ajouter autre exécutable qui appelle 'startShowAds (adArrayList)' et le démarrer avec post –

+0

retardé ainsi il peut être fait comme ceci? 'new Runnable() {publique void run() {startShowAds (arrayList)}}'? –