File.list () devuelve los archivos en un orden diferente para 4.0 que 2.2

Si estoy usando Android 2.2 y el File.list() llamada File.list() en BookGenerator.java , entonces las páginas y los capítulos vienen en la secuencia exacta, pero cada vez que ejecuto en Android 4.0 me da la lista de páginas inversa o invierta el orden de las páginas.

¿Existe un problema de compatibilidad entre 2.2 y 4.0?

No debe confiar en listFiles () para una lista ordenada de las páginas:

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#listFiles ()

"No hay ninguna garantía de que las cadenas de nombres en la matriz resultante aparecerán en cualquier orden específico;"

Tienes que crear tu propio sistema de pedido, basado en el nombre de archivo o lastModified o el tamaño del archivo. Puede utilizar un Comparador <Archivo> o Comparador <Cadena> para ordenar los archivos en un SortedSet, o como se mencionó anteriormente, crear una propia clase para los elementos que ordenar que implementa Comparable. Yo sugeriría la primera solución, ya que es un poco estúpido para envolver la clase de archivo o cadena en otro sólo para esta funcionalidad.

Un ejemplo con mucha sobrecarga de memoria:

 TreeSet<File> pages = new TreeSet<File>(new Comparator<File>(){ public int compare(File first, File second) { return first.getName().compareTo(second.getName()); } }); for (File file : allFiles) { pages.add(file()); } allFiles = pages.toArray(); 

Si desea una más eficiente, tiene que implementar su propio método para ordenar una matriz en su lugar.

El método list() no garantiza ningún orden específico para los elementos. La documentación de Android carece de este punto, pero la API oficial de Java SE javadoc advierte sobre ello:

No hay ninguna garantía de que las cadenas de nombres de la matriz resultante aparecerán en cualquier orden específico; No se garantiza, en particular, que aparezcan en orden alfabético.

Debe ordenar la matriz con Collections.sort() antes de usarla.

 File fChapters = new File(internalStorage + bookName + "/Chapters"); // Obtain the chapters file names list (the files in the directory) chapters = fChapters.list(); // Sort the file names according to default alphabetic ordering Collections.sort(chapters) // The chapters list is now sorted from A to Z 

Con el sort(List list, Comparator c) sobrecarga de este método se puede definir cualquier orden que usted necesita. Por ejemplo, ignore el caso de las letras en los títulos:

 Collections.sort(chapters, new Comparator<String>() { @Override public int compare(String chapter1, String chapter2) { return chapter1.compareToIgnoreCase(chapter2); } }); 

Utilice un Comparable para clasificarlo usted mismo.

  • Excepción OutOfMemory en la conversión de ByteArray a String?
  • Android Building Workspace Error
  • Evitar que la dependencia de Gradle para la biblioteca de soporte sea reemplazada por una versión más reciente
  • Android Studio: Error al crear el código de error JVM: -1
  • Uso de volatile para hacer enum thread safe
  • cómo corregir "Declaración de devolución faltante" en java
  • Obtener la latitud y la longitud de una posición de clic en un mapas de forja 0.5.1 MapView
  • Cómo generar una consulta con la selección por valor del campo del objeto extraño
  • Cómo obtener la ubicación actual en Android
  • Android: layout_gravity no funciona como se esperaba
  • Introduzca la manipulación de claves en Libgdx TextField
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.