将微调框保存到共享首选项的正确方法

时间:2018-10-23 21:11:58

标签: android

我有一个微调器,它具有从array-list填充的3个值。

我想将微调框选择的值保存到共享的首选项,以便在使用回到应用程序时可以再次加载。这样做的正确方法是什么(以避免将来出现问题)

1-保存所选内容的位置

2-保存所选内容的文本

3-获取所选内容的位置/文本,获取对应的枚举,并保存枚举名称。

我倾向于第三种选择,以防位置/文本在以后的更新中发生变化,但我想知道执行此任务的正确方法是什么

谢谢

2 个答案:

答案 0 :(得分:1)

保存位置(1个变体)和文本(2个变体)是错误的做法。因为您的微调器项目的文本将来可能会更改,因此它们的位置也可以更改。

我认为,您需要创建枚举或@TypeDef元素并将其保存到sharedPreferences中。 @TypeDef具有更高的性能,但枚举具有更多的功能(如果您使用Kotlin,则可以使用sealed类)。对于此解决方案,只需编写可将枚举映射到微调项的映射器。

如果使用枚举,最好的方法是将其保存为ENUM.name()

答案 1 :(得分:0)

仔细阅读并理解。获取该帖子并使用,以您自己的理解。

声明您的微调器和sharedPreferences

public Spinner crimeType;
SharedPreferences sharedPreferencesFirstTime;
//////



sharedPreferencesFirstTime = getPreferences
                (Context.MODE_PRIVATE);

String firstTime = getResources().getString(R.string.saved_first_time);
firstTimekey = sharedPreferencesFirstTime.getString
(getString(R.string.saved_first_time),
                firstTime);


crimeType = v.findViewById(R.id.crimeType);

初始化字符串数组

    String[] plants = new String[]{
            "Antisocial behaviour",
            "Arson",
            "Burglary"

    };

初始化ArrayAdapter

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(
            getActivity(), android.R.layout.simple_spinner_item, plants
    );

设置布局资源以创建下拉视图。

     /*

            Parameters : resource
                the layout resource defining the drop down views
     */

     spinnerArrayAdapter.setDropDownViewResource
     (android.R.layout.simple_spinner_dropdown_item);

设置用于提供支持此数据的适配器

  /*
    setAdapter(SpinnerAdapter adapter)
        Sets the Adapter used to provide the data which backs this Spinner.
 */
crimeType.setAdapter(spinnerArrayAdapter);

crimeType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        //Get the text content
        crime_string= parent.getItemAtPosition(position).toString();

        //Get Position of the crime
        selectionPosition= 
              parent.getItemAtPosition(position);

   SharedPreferences.Editor editor = sharedPref.edit();

        String key2 = crime_string;
        editor.putString(getString(R.string.saved_login_key), key2);
        editor.apply();


    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        //Another interface callback
    }
});