リスト ビューの作成に使用しているカスタム アダプタに複数ArrayList<String>
の が「リンク」されています。簡単にするために、合計で 2 つだけだとします。リストの一貫性を維持するために、それらの1つを並べ替えてから、この新しい順序を他の順序に反映させたいと思います。
これは私がやろうと思っていたことであり、動作しませIndexOutOfBoundsException: Invalid index 0, size is 0
ん*
。
// initial declarations:
List<String> filenameEntries = new ArrayList<String>();
List<String> idEntries = new ArrayList<String>();
/* various operations that fill
the two ArrayList here... */
// sorting:
List<String> oldFilenameEntries = new ArrayList<String>();
List<String> oldIdEntries = new ArrayList<String>();
oldFilenameEntries = filenameEntries;
oldIdEntries = idEntries;
idEntries.clear();
Collections.sort(filenameEntries);
for (int i = 0; i < filenameEntries.size(); i++ ) {
for (int j = 0; j < oldFilenameEntries.size(); j++ ) {
if (oldFilenameEntries.get(j) == filenameEntries.get(i)) {
idEntries.add(oldIdEntries.get(j)); // *
}
}
}
私の考えは、新しいものからすべての要素について古いArrayListを検索し、この「古い」インデックスを使用して他のArrayListを再生成することでした。
(他の「ソートされた」 ArrayList が再びでなければならないという制限がありますidEntries
。これが、この種の転送を行った方法です)
なにか提案を?ありがとう。
編集: 並べ替えの問題だと思ったのですが、ArrayLists のコピーを作成する正しい方法を逃したことがわかりました。エラーがあったことを指摘してくれたすべての人に感謝します
oldFilenameEntries = filenameEntries;
oldIdEntries = idEntries;
なぜ。
解決策をより迅速に指摘する答えを受け入れました。上記の2行を削除し、前のものを次のように変更しました
List<String> oldFilenameEntries = new ArrayList<String>(filenameEntries);
List<String> oldIdEntries = new ArrayList<String>(idEntries);
私が見る限り、ATM はすべて期待どおりに機能しているようです。