我正在開發一個應用程序,我需要獲取文件列表,從中讀取一些數據,並根據這些數據在ListView中顯示所有這些文件。如何在Java中以有序方式異步填充數組?
問題是可能有很多它們,所以它們都需要時間加載它們。我可以選擇將它們異步加載(在一個線程中),或者顯示一個加載框。我遇到第一個問題:ArrayAdapter
正在填充,然後在最後排序,所以到時候所有的項目都在那裏,列表沒有排序。我想到的解決方案是:
我想我每次插入項目時的排序名單,但是這將使得過程更慢......但同樣,有this,但我不知道我明白如何使用這種排序算法。
使用某種有序的數組,如here所述。我不知道如何/如果我能用
ArrayAdapter
來實現它。忘記使用線程填充
ListView
。只需添加「加載」消息或完全沒有。將數據中的數據存儲在數據庫中,並保存文件的路徑,並讀取數據庫中的所有條目。但我不知道這將會使過程更快...
la = new ArrayAdapter(this, R.layout.list_item); setListAdapter(la); Handler handler = new Handler() { public void handleMessage(Message message) { switch (message.what) { case TrackBrowser.DID_SUCCEED: { // This is called when the thread is done finding the list of items // mComparator is my own Comparator la.sort(mComparator); break; } case TrackBrowser.ADD: { // This is called everytime an item is parsed TrackBrowser.TrackView tv = (TrackBrowser.TrackView) message.obj; la.add(tv); // Should I sort here everytime? //la.sort(mComparator); break; } } } }; // This class just loops through the files returned by listFiles and sends messages. TrackBrowser tb = new TrackBrowser(handler); Thread thread = new Thread(tb); thread.start();
我需要你的哪種解決方案,我應該使用,以及如何使用反饋前兩個(如果我要使用它們) ?
非常感謝。
性能有多好呢?你能舉一個小例子嗎?類似於'i = Collections.binarySearch(myList,newItem,myCustomComparator); myList.add(i,newItem);'? – jadkik94
@ jadkik94我已經更新了我的答案。 – Zheka
好的。謝謝。我想它應該與其他整數一起工作。但這是如何工作的?我認爲binarySearch返回'value'的索引(如果它存在),如果不是'-1',則返回'value'的索引。如果是這樣,那麼爲什麼您的示例中的100最後會結束? – jadkik94