2016-07-06 3 views
0

私はリストのためのライブラリを書いています。リスト内のオブジェクトは、クライアント定義の方法でソートする必要があります。そこで、クライアントはいくつかのComparator(名前、価格など)を書き込み、それらをライブラリヘルパーに渡します。私たちは、Fragmentに渡されBundle、このマップを置くためにHashMap<Integer, Comparator>にそれらの比較器を配置する必要があります。私がここに直面している問題は、ComparatorはSerializeableではないため、ランタイム例外が発生することです((バンドルするコンパレータを入れてください

+1

は、なぜあなたは、コンパレータインターフェイスをシリアル化する必要がありますか? –

+1

'Comparable'と' Parcelable'を拡張するインタフェースを定義します。クライアントアプリケーションにそのインタフェースを実装させます。次に、オブジェクトを 'Bundle'に置くことができます。つまり、他のアプローチ(例えば、保持されているフラグメント、クライアントのサブクラス、あなたのフラグメントクラス)の使用を検討するかもしれません。 – CommonsWare

+0

@CommonsWare>クライアントアプリケーションにそのインターフェースを実装させます。クライアントに何らかのインターフェースを実装するように依頼すれば、このような実装は簡単ではないでしょうか?公共コンパレータprovideComparator(int型indexOfSortMethod){リターンcomparators.get(indexOfSortMethod);} – Tau

答えて

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」に含まれます。アクティビティ/フラグメントを破棄する前にスクロールを適切に値に設定することに関連しています。

+0

あなただけの目的は、データをparcellingするいくつかの合成クラスを作成する話ですか?物事を明確にするために、サンプルコードを提供してください。 – Tau

+0

もちろん、私が説明したい点の例を見てみましょう。 – Luis

関連する問題