首页 > 解决方案 > 安卓数组列表存储未恢复到其保存的排序顺序

问题描述

  1. 我有一个 myArrayList ,它将以其保存的排序顺序存储和恢复。但是代码并没有这样做。为什么?

    ArrayList<String> myArrayList
    
    // save:
            SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    SharedPreferences.Editor edit;
    edit = prefs.edit();
    edit.putStringSet("mydata", new LinkedHashSet<String>(myArrayList));
    edit.commit();
    
        // read:
    myArrayList = new ArrayList<String>(PreferenceManager
            .getDefaultSharedPreferences(getBaseContext()).getStringSet(
                    "mydata", new LinkedHashSet<String>()));
    adapterAppList = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            myArrayList);
    
  2. 有没有更好的方法可以存储 myArrayList 的值并恢复到其原始保存的排序顺序?

标签: androidsortingarraylistsharedpreferencesstore

解决方案


HashSet 不保留订单,它正在订购以最快地找到它。
您可以将列表转换为 json 并保存为字符串。
当你需要它时,你可以将它从 json 转换为 ArrayList 并保持排序。
例子:

String listAsString = new Gson().toJson(arrayList); //list to string
List<String> arrayList = Arrays.asList(new Gson().fromJson(listAsString,String[].class)) //string to list

不要忘记将库添加到 build.gradle:

dependencies {
  implementation 'com.google.code.gson:gson:2.8.6'
}

推荐阅读