2

SharedPreferencesを使用して、次のようにArrayListを保存およびロードしています:(保存)

        SharedPreferences loadGlobalVariables = getSharedPreferences(APP_NAME, 0);
        Categories = new ArrayList<String>(loadGlobalVariables.getStringSet("Categories", new HashSet<String>()));

(ロード)そしてこれ(両方とも正常に動作し、保存とロードの両方が正しく行われます)

 SharedPreferences saveGlobalVariables = getSharedPreferences(APP_NAME, 0);
    SharedPreferences.Editor editor = saveGlobalVariables.edit();
    editor.putStringSet("Categories", new HashSet<String>(Categories));
    editor.commit();

ただし、取得されたArrayListの要素の順序は以前とは異なります。このArrayListをCategory.toArray(temArray)によってリストとして(このリストは開くたびに更新されます)ダイアログに入れ、リストがアルファベット順ではなくなったため、これを知っています。

以前は、このArrayListはその中のString要素をアルファベット順にソートしていました。SharedPreferencesから取得し直すと、アルファベット順にソートされなくなりました。

よろしくお願いします。

4

2 に答える 2

9

私はこの状況をトリックで克服しました。

  1. SharedPreferencesで、最初にArrayListのサイズを格納します。
  2. forループでは、arraylistの要素をSharedPreferencesファイルに格納します。

キーと値のペアとしてキー"ArraylistName"+要素の位置を保持する際の秘訣は次のとおりです。

取得中:

  1. 最初にarrayListのサイズを取得します
  2. for(i = 0; i <sizeOfList; i ++){キー値 "ArrayListName"+iの要素をフェッチ}
于 2013-01-23T12:35:33.480 に答える
1

JavaSetでは、要素の順序は維持されません。残念ながらSharedPreferences.Editor、リストを格納する方法は提供されていないため、リストを文字列にシリアル化してを使用する必要がありますputString()

SharedPreferencesでのリストまたはセットの保存を参照してください。

于 2013-01-23T12:25:30.123 に答える