Android 2.2 を使用してBookGenerator.javaFile.list()
のメソッドを呼び出すと、ページと章は正確な順序で表示されますが、Android 4.0 で実行するたびに、逆ページ リストまたは逆ページ順序が表示されます。
2.2 と 4.0 の間に互換性の問題はありますか?
Android 2.2 を使用してBookGenerator.javaFile.list()
のメソッドを呼び出すと、ページと章は正確な順序で表示されますが、Android 4.0 で実行するたびに、逆ページ リストまたは逆ページ順序が表示されます。
2.2 と 4.0 の間に互換性の問題はありますか?
ページの順序付きリストをlistFiles()に依存しないでください。
http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#listFiles()
「結果の配列の名前文字列が特定の順序で表示されるという保証はありません。」
ファイル名、lastModified、またはファイルのサイズに基づいて、独自の注文システムを作成する必要があります。Comparator<File>またはComparator<String>を使用して、SortedSet内のファイルを並べ替えることができます。または、前述のように、Comparableを実装する並べ替えるアイテムの独自のクラスを作成することもできます。この機能のためだけにFileまたはStringクラスを別のクラスにラップするのは少しばかげているので、最初の解決策をお勧めします。
大量のメモリオーバーヘッドがある例:
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();
より効率的なものが必要な場合は、代わりに配列を並べ替えるための独自のメソッドを実装する必要があります。
このlist()
メソッドは、アイテムの特定の順序を保証するものではありません。Android のドキュメントにはこの点が欠けていますが、公式のJava SE API javadocでは次のように警告されています。
結果の配列内の名前文字列が特定の順序で表示されるという保証はありません。特に、アルファベット順に表示されるとは限りません。
Collections.sort()
使用する前に配列をソートする必要があります。
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
このメソッドのsort(List list, Comparator c)
オーバーロードを使用すると、必要な順序を定義できます。たとえば、タイトルの文字の大文字と小文字は無視します。
Collections.sort(chapters, new Comparator<String>() {
@Override
public int compare(String chapter1, String chapter2) {
return chapter1.compareToIgnoreCase(chapter2);
}
});
Comparable を使用して自分で並べ替えます。