如果我使用Android 2.2並在BookGenerator.java中調用File.list()
方法,那麼頁面和章節按照確切的順序排列,但每當我在Android 4.0上執行時,反向頁面列表或反向頁面順序。File.list()以不同於4.0的順序返回文件的數量爲012
2.2和4.0之間是否存在兼容性問題?
如果我使用Android 2.2並在BookGenerator.java中調用File.list()
方法,那麼頁面和章節按照確切的順序排列,但每當我在Android 4.0上執行時,反向頁面列表或反向頁面順序。File.list()以不同於4.0的順序返回文件的數量爲012
2.2和4.0之間是否存在兼容性問題?
你不應該在網頁的有序列表依靠listFiles():
http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#listFiles()
「沒有保證所得數組中的名稱字符串會出現在任何特定的訂購;」
您必須根據文件名或lastModified或文件大小創建您自己的訂購系統。您可以使用比較器<文件>或比較器<字符串>對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);
}
});
我很難理解您輸入的內容。你能讓它更清晰一點嗎? –
@JasonRobinson你確定我是。你現在可以看看嗎 – Rizvan
仍然很難。你是否在版本2.2和2.3中說過,某些數組是以特定的順序出現的,然後在4.0中以相反的順序出現? –