【问题标题】:How to save Spinner as Shared Preference?如何将 Spinner 保存为共享首选项?
【发布时间】:2016-02-13 14:03:47
【问题描述】:

我已经能够将整数和字符串保存为共享首选项,但已经搜索并且似乎无法将 Spinners 选择的值保存为共享首选项?

        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

            }

        });

在 OnCreate 中访问共享首选项:

       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_diet);


        spnCalorieRange = (Spinner) findViewById(R.id.spnCalorieRange);

        sharedPreferences =  PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences pref = getApplicationContext().getSharedPreferences("Options", MODE_PRIVATE);
        editor=pref.edit();

         String strAvgCalIntake = Double.toString(dailyCalorieIntake);
         String strGoal = Double.toString(goal);

        strAvgCalIntake = loadSavedPreference("strAvgCalIntake");
        strGoal = loadSavedPreference("strGoal");

        etAverageCalorieIntake.setText(strAvgCalIntake);
        etLoseWeight.setText(strGoal);

        //mPrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        //spinner.setSelection(mPrefs.getInt(PREF_SPINNER, 0));

        // int selectedPosition = sharedpreferences.getInt("spinnerSelection", 0);


        int selectedPosition = spnCalorieRange.getSelectedItemPosition();
        sharedPreferences.getInt("spinnerSelection", selectedPosition);
        ((Editor) sharedPreferences).commit();

这是我保存共享首选项的按钮: 顺便说一句,字符串保存得很好。

  Button btnBack = (Button)findViewById(R.id.btnBack);
    btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
        public void onClick(View v) {

                     String strAvgCalIntake =       Double.toString(dailyCalorieIntake);
                    String strGoal = loadSavedPreference("strGoal");
                spnCalorieRange = (Spinner) findViewById(R.id.spnCalorieRange);

                    strAvgCalIntake = etAverageCalorieIntake.getText().toString();
                    savePreference("strAvgCalIntake",strAvgCalIntake);

                strGoal = etLoseWeight.getText().toString();
                savePreference("strGoal",strGoal);

                    SharedPreferences spref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
                    SharedPreferences.Editor editor = spref.edit();
                editor.putString("deficitPercentage_key", Double.toString(deficitPercentage)); //
                    editor.commit();

【问题讨论】:

  • 以及您如何从 SharedPreferences 中读取该值。贴出部分代码。
  • 该代码现已发布,感谢您的帮助,非常感谢它:)

标签: android sharedpreferences spinner


【解决方案1】:

如果您已经验证了 deficitPercentage 值,(我希望您这样做了)

SharedPreferences spref = getSharedPreferences("your_prefs_name", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = spref.edit();
editor.putString("deficitPercentage_key", Double.toString(deficitPercentage)); //
editor.commit();

【讨论】:

  • 验证赤字百分比是什么意思?
  • 如果 deficitPercentage 没有被任何其他模块修改,那么是可以的,但是你应该将 .05, 0.2 替换为常量,这样会更好并且会提高质量你的应用...
  • 好的,谢谢。所以我将该块添加到我的 onClick 按钮中,我正在保存我的其他变量,但不幸的是它似乎没有工作。
猜你喜欢
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2022-01-15
  • 2013-07-27
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多