私はリストのためのライブラリを書いています。リスト内のオブジェクトは、クライアント定義の方法でソートする必要があります。そこで、クライアントはいくつかのComparator(名前、価格など)を書き込み、それらをライブラリヘルパーに渡します。私たちは、Fragment
に渡されBundle
、このマップを置くためにHashMap<Integer, Comparator>
にそれらの比較器を配置する必要があります。私がここに直面している問題は、ComparatorはSerializeableではないため、ランタイム例外が発生することです((バンドルするコンパレータを入れてください
0
A
答えて
0
)私は同じ問題に直面していました(価格、近接、名前、アドレス順)。バンドル内のアイテムのリストを保存することによりバンドルを復元するときに、その後。そして、ソートパラメータ(もしあれば)(項目はIParcelableを実装し、いくつかのクラスのインスタンスでなければなりません)私は、アイテムのparcelableArrayだけでなく、ソート方法を得ましたアクティビティ/フラグメントで適切に値を設定する。この方法は、あなたは彼らが保存されたのと同じ順序で項目のリストを回復するので、すべてが期待どおりに動作することを
お知らせが。
私見番目コンパレータをバンドルすることで達成しようとしていることよりずっと簡単です。
UPDATE:例:
1.-モデルはIParcelableを実装:断片/活性で
public class Parking implements Parcelable {
...
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mId);
parcel.writeString(mCode);
...
}
public static final Parcelable.Creator<Parking> CREATOR
= new Parcelable.Creator<Parking>() {
public Parking createFromParcel(Parcel in) {
return new Parking(in);
}
public Parking[] newArray(int size) {
return new Parking[size];
}
};
}
2.-、IはIParcelableを実装私のモデルのArrayListと適用されたフィルタを使用します:
private ArrayList<Parking> mParkings;
private ParkingsFilter mFilter;
3.-復元/保存するときに、私は、アカウントにこのアイテムを取る:
0は、このように私は、全体のリストを保存し、保存されたと私は同じ順序でそれを回復します。一方で、バンドルを復元するときに適切に値を設定するために適用されたソートオプションを回復します。
ここでのキーはです.getParcelableArrayList()、.putParcelableArrayList()が呼び出されます。フィルタは列挙型または単純な整数/文字列として保存することができます。
また、Iは、例えば、直接この特定の問題に関連していないが、有用であり得る「currentFirstVisibleItem」に含まれます。アクティビティ/フラグメントを破棄する前にスクロールを適切に値に設定することに関連しています。
関連する問題
- 1. Xamarin Studioにブラケットを1つだけ入れてください。
- 2. 入力に値を入れてくださいC#
- 3. clojureのリソースパスに多くのjarを入れてください
- 4. を入力してください。
- 5. 行間に異なるスペースを入れてください。
- 6. イメージを光沢のあるアプリに入れてください
- 7. ヘッドセットが挿入されていることを確認してください
- 8. すぐにファイルをフォルダに入れてください
- 9. Python pandas:データを比較して入れてください
- 10. javascriptに素晴らしいフォントを入れてください
- 11. オンラインフォームに記入してください
- 12. すべての入力フィールドがjQueryで記入されていることを確認してください
- 13. MySQLテーブルにまだ挿入されていない場合は挿入してください。
- 14. バンドルをインストールしてrails3用のsvnソースパスを指定してください
- 15. XCTestエラー:バンドルをロードできませんでした。バンドルを再インストールしてみてください
- 16. Android - EditTextフィールドに入力された入力を確認してください
- 17. テキストと表を空白で入力してください/入力してください
- 18. Sedマッチ/コピーしてposixシェルに入れてください
- 19. 入れ子にしてみてくださいwhileループ
- 20. 私の豆を別のファイルに入れてください
- 21. Python Requests Module問題を入れてください
- 22. IOSスタックビューの要素間にマージンを入れてください
- 23. pdfmakeレポートにチェックマークを入れてください
- 24. EF特定の親に子供を入れてください
- 25. UITableViewCellの左側にチェックマークを入れてください
- 26. ポップアップウィンドウからFCKEditorに画像を入れてください
- 27. アスタリスクとアンパサンドの両方をパラメータに入れてください。++
- 28. テーブルセルの先頭にdivを入れてください
- 29. Qtのスロットに引数を入れてください
- 30. NATの背後にdocker0を入れてください
は、なぜあなたは、コンパレータインターフェイスをシリアル化する必要がありますか? –
'Comparable'と' Parcelable'を拡張するインタフェースを定義します。クライアントアプリケーションにそのインタフェースを実装させます。次に、オブジェクトを 'Bundle'に置くことができます。つまり、他のアプローチ(例えば、保持されているフラグメント、クライアントのサブクラス、あなたのフラグメントクラス)の使用を検討するかもしれません。 – CommonsWare
@CommonsWare>クライアントアプリケーションにそのインターフェースを実装させます。クライアントに何らかのインターフェースを実装するように依頼すれば、このような実装は簡単ではないでしょうか?公共コンパレータprovideComparator(int型indexOfSortMethod){リターンcomparators.get(indexOfSortMethod);} – Tau