私は、ファイルのリストを取得し、そこからいくつかのデータを読み取り、そのデータに基づいて並べ替えられたこれらすべてのファイルをListViewに表示する必要があるアプリを開発しています。
問題は、それらがたくさんある可能性があるため、それらすべてをロードするのに時間がかかることです。それらを非同期で(スレッドで)ロードするか、ロードボックスを表示するかを選択しました。私は最初のものに問題があります:ArrayAdapterが埋められ、最後にソートされているので、すべてのアイテムがそこにあるときまでに、リストはソートされていません。私が考えた解決策は次のとおりです。
アイテムを挿入するたびにリストを並べ替えることを考えましたが、それではプロセスがさらに遅くなります...しかし、これもありますが、そのような並べ替えアルゴリズムの使用方法がわかりません。
ここで説明するように、ある種のソートされた配列を使用します。で実装する方法/かどうかはわかりません
ArrayAdapter。スレッドを使用してを埋めることを忘れてください
ListView。「読み込み中」のメッセージを追加するか、何も追加しないでください。データをデータベース内のファイルに保存し、ファイルのパスを保存して、データベースからすべてのエントリを読み取ります。しかし、これによってプロセスが速くなるかどうかはわかりません...
la = new ArrayAdapter(this、R.layout.list_item);
setListAdapter(la);
ハンドラーhandler=new Handler(){
public void handleMessage(メッセージメッセージ){
スイッチ(message.what){
ケースTrackBrowser.DID_SUCCEED:{
//これは、スレッドがアイテムのリストを検索し終えたときに呼び出されます
//mComparatorは私自身のコンパレータです
la.sort(mComparator);
壊す;
}
ケースTrackBrowser.ADD:{
//これはアイテムが解析されるたびに呼び出されます
TrackBrowser.TrackView tv =(TrackBrowser.TrackView)message.obj;
la.add(tv);
//毎回ここで並べ替える必要がありますか?
//la.sort(mComparator);
壊す;
}
}
}
};
//このクラスは、listFilesによって返されたファイルをループして、メッセージを送信します。
TrackBrowser tb = new TrackBrowser(handler);
スレッドthread=new Thread(tb);
thread.start();
どのソリューションを使用すべきか、最初の2つをどのように使用するか(使用する必要がある場合)についてのフィードバックが必要ですか?
どうもありがとう。