【问题标题】:How to save spinner to saved/shared preferences如何将微调器保存到已保存/共享的首选项
【发布时间】:2023-03-08 21:35:01
【问题描述】:

我可以在我保存的首选项中保存字符串,但在保存我的微调器时遇到了困难。

 public class Diet extends Activity {

  private SharedPreferences sharedPreferences;
  Spinner spnCalorieRange;

这是我的 onCreate:

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

String strAge = Integer.toString(age);
String strHeight = Integer.toString(height);
String strWeight = Integer.toString(weight);

name = loadSavedPreference("name");
strAge = loadSavedPreference("strAge");
strHeight = loadSavedPreference("strHeight");
strWeight = loadSavedPreference("strWeight");

etName.setText(name);
etAge.setText(strAge);
etHeight.setText(strHeight);
etWeight.setText(strWeight);

这是我的 onCreate 中的 Spinner:

spinner = (Spinner)findViewById(R.id.spnCalorieRange); 
    adapter = ArrayAdapter.createFromResource(this, R.array.Calorie_Range, android.R.layout.simple_spinner_dropdown_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            long item = parent.getItemIdAtPosition(position);
            String pos =spinner.getSelectedItem().toString();
            //sharedPreferences.edit().putInt("PREF_SPINNER", position).commit();
            if (item == 0){
                deficitPercentage = .05;
            }
            else if (item ==1)
            {
                deficitPercentage = .1;
            }
            else if (item ==2)
            {
                deficitPercentage = .15;    
            }
            else if (item ==3)
            {
                deficitPercentage = .2;
            }
            else if (item ==4)
            {
                deficitPercentage = .25;
            }
            else
            {
                deficitPercentage = .3;
            }
            //editor.putString("pos", pos);
            //editor.commit();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

    });

这是在我的 onCLick 按钮后面,我在其中保存字符串和微调器

 age = (int) Double.parseDouble(etAge.getText().toString());
        height = (int) Double.parseDouble(etHeight.getText().toString());
        weight = (int) Double.parseDouble(etWeight.getText().toString());


        //Save Preferences
        String strAge = Integer.toString(age);
        String strHeight = Integer.toString(height);
        String strWeight = Integer.toString(weight);

        name = etName.getText().toString();
        savePreference("name",name);

        strAge = etAge.getText().toString();
        savePreference("strAge",strAge);

        strHeight = etHeight.getText().toString();
        savePreference("strHeight",strHeight);

        strWeight = etWeight.getText().toString();
        savePreference("strWeight",strWeight);:

【问题讨论】:

  • 您正在使用资源文件中的数组加载微调器,所以我假设您不想保存完整的数据。是否要保存当前选定的项目?
  • 为什么一件事有两个问题? stackoverflow.com/questions/35380863/… 标记重复。

标签: android sharedpreferences spinner


【解决方案1】:

您无法将实际的微调器对象保存到共享首选项中,但您可以保存使微调器发挥其魔力的所有值,并且下次创建微调器时,只需应用这些值

【讨论】:

    【解决方案2】:

    在您的onItemSelected 位置:

    int spinnerPosition = spinner.getSelectedItemPosition();
    saveSpinnerPosition(spinnerPosition);
    

    保存方法

    public void saveSpinnerPosition(int position){
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        prefEditor.putInt("spnCalorieRange",position); 
        prefEditor.apply();
    }
    

    加载方法

    public void loadSpinnerPosition{
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        int position= sharedPreferences .getInt"spnCalorieRange",-1);
        if(spinnerValue > -1)
    
        // set the value of the spinner 
        spinner.setSelection(position);
    }
    

    要将微调器放回原位,请在您的onCreate 中调用loadSpinnerPosition

    ------------------------------------------ -------------------------------------------------- --------------------------------------

    编辑:

    因为我注意到this post也是你的问题,你也可以在once做所有事情:

    在您的活动的顶部

    int spinnerPosition; 
    

    在您的onItemSelected 位置:

    spinnerPosition = spinner.getSelectedItemPosition();
    

    保存方法

    public void saveMethod(){
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("Gender", radioSexButton.isChecked());
        editor.putBoolean("Male", rdoMale.isChecked());
        prefEditor.putInt("spnCalorieRange",spinnerPosition); 
        prefEditor.apply();
    }    
    

    加载方法

    public void loadMethod(){
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        int position= sharedPreferences .getInt"spnCalorieRange",-1);
        radioSexButton.setChecked(sharedPreferences.getBoolean("Gender", false)); 
        rdoMale.setChecked(sharedPreferences.getBoolean("Male", false));
    
        if(spinnerValue > -1)
    
        // set the value of the spinner 
        spinner.setSelection(position);
    }
    

    然后当你想保存所有状态时调用saveMethod(),当你想加载所有状态时调用loadMethod()

    应该帮助你

    【讨论】:

    • 酷看起来不错,我应该把保存和加载方法放在哪里?
    • 没关系,就在你班上的某个地方。例如下面你的onCreate方法。
    • 好的,差不多排序好了,唯一的问题是它无法识别“getDefaultSharedPreferences”
    • getDefaultSharedPreference更改为PreferenceManager.getDefaultSharedPreference
    • 如果您想一次性完成所有操作,请查看我的最新编辑
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2011-12-18
    • 1970-01-01
    • 2021-05-31
    • 2022-01-15
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多