2016-02-17 6 views
0

Je travaille sur l'application android pour faire un gif animé. Dans cette application, je veux afficher le gif créé dans la vue personnalisée. J'ai fait une activité 'DisplayGif' quand le gif est créé et enregistré dans la carte SD dans le dossier 'myFile', cette activité affiche les derniers enregistrés. Dans la vue personnalisée J'ai utilisé ce code pour obtenir la dernière gif:affichant le fichier récemment enregistré dans la vue personnalisée

String ExternalStorageDirectoryPath = Environment 
     .getExternalStorageDirectory() 
     .getAbsolutePath(); 

String targetPath = ExternalStorageDirectoryPath + "/myFile"; 

File targetDirector = new File(targetPath); 

File[] listFile = targetDirector.listFiles(); 

Arrays.sort(listFile, new Comparator() 
{ 
    public int compare(Object o1, Object o2) { 

     if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
      return -1; 
     } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
      return +1; 
     } else { 
      return 0; 
     } 
    } 

}); 

String s = listFile[0].getAbsolutePath(); 


mMovie = Movie.decodeFile(s); 

Cela ne fonctionne pas, mais quand je « LISTFILE [1] .getAbsolutePath(); » Cela a fonctionné pour le gif enregistré précédent pas le nouveau! Existe-t-il un meilleur moyen d'afficher le dernier gif?

+0

utilisez-vous l'adaptateur .. ??? – Nils

+0

vous voulez obtenir le dernier fichier gif enregistré? – umerk44

+0

Conserver la référence du dernier fichier sauvegardé et le renvoyer de la classe par l'intermédiaire de la méthode – umerk44

Répondre

0

vous ne faites pas attention au tri ASC et DESC. vous pouvez trouver le dernier article par listfile[listfile.lentgh-1] ou vous devez utiliser de 'reverseOrder'. rendre la classe Comprator comme ci-dessous:

public class ObjectComparator implements Comparator<Object> { 

@Override 
    public int compare(Object o1, Object o2) { 
    if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
     return -1; 
    } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
     return +1; 
    } else { 
     return 0; 
    } if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
     return -1; 
    } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
     return +1; 
    } else { 
     return 0; 
    } 
} 

utiliser cette classe dans votre code comme ceci:

Comparator<Object> descendingObjectComparator = Collections.reverseOrder(new ObjectComparator()); 

et trier votre tableau par ce code:

Arrays.sort(listFile , descendingObjectComparator); 

si vous voulez en savoir plus sur tableaux et tri, vous pouvez utiliser this link

+0

merci de votre réponse. J'ai essayé la classe 'ObjectComparator', qui inverse le tableau afin que je puisse obtenir le plus ancien fichier 'gif' en utilisant 'listFile [0]' ici la vue personnalisée montre parfaitement le gif mais quand j'utilise 'listFile [listFile.length-1 ] 'pour obtenir le plus récent, la vue personnalisée ne s'affiche pas. –

+0

@majidjiji vérifiez-vous la valeur de cet objet? est-ce remplir et correct? –

+0

Après avoir essayé votre code, j'ai obtenu le dernier gif enregistré correctement, donc quand j'appuie sur le bouton 'next', le gif est sauvegardé et ensuite je passe à 'DisplayActivity' qui a la vue personnalisée. Alors le gif n'est pas affiché, mais quand je recrée l'activité "une fois ou plus" il est finalement affiché !! –