如何从其他视图访问共享首选项

时间:2013-11-13 02:18:31

标签: android eclipse sharedpreferences

我在settings.java中有以下代码:

public static int numberOfQuestions = 0;
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);    

        pref = getSharedPreferences(Constants.PREF_SETTINGS, 0);    

        final RadioGroup rg_numberOfQuestions = (RadioGroup) findViewById(R.id.radioGroupQuestions);        
        rg_numberOfQuestions.setOnCheckedChangeListener(this);      
        RadioButton rbtn = ((RadioButton) rg_numberOfQuestions.findViewById(pref.getInt("NQ", 0)));
        if(rbtn!=null)
            rbtn.setChecked(true);
}

public void onCheckedChanged(RadioGroup rg, int i) {                        
        switch (rg.getCheckedRadioButtonId())
        {
        case R.id.rb_0to10:
            numbersBetween = 10;        
            break;

        case R.id.rb_0to25:
            numbersBetween = 25;        
            break;

        case R.id.rb_0to50:
            numbersBetween = 50;
            break;
        }
        if(rg.getCheckedRadioButtonId() == R.id.rb_0to10 || rg.getCheckedRadioButtonId() == R.id.rb_0to25 || rg.getCheckedRadioButtonId() == R.id.rb_0to50)
        {
            savePref("NB", rg.getCheckedRadioButtonId());
        }
     }

这是保存和访问首选项的代码:

    private void savePref(String key, int value) {
        pref = getSharedPreferences(Constants.PREF_SETTINGS, 0);
        editor = pref.edit();
        editor.putInt(key, value);      
        editor.commit();
    }

    private void savePref(String key, Boolean value) {
        pref = getSharedPreferences(Constants.PREF_SETTINGS, 0);
        editor = pref.edit();
        editor.putBoolean(key, value);      
        editor.commit();
    }   
}   

如果我在设置中numberOfQuestions变量得到更新,它在我的另一个名为main.java的视图中工作正常。但是让我说我​​直接打开main.java并且不打开设置第一个numberOfQuestions没有正确的值。是否有更简单的方法将共享偏好值转移到其他视图?或者我还需要在main.java中编写所有案例吗?

2 个答案:

答案 0 :(得分:0)

您无需执行任何特殊操作,您可以以相同的方式使用应用各个部分的相同共享偏好设置。

您可以将访问共享首选项的方法移动到:

  • 您所有活动的家长级
  • 辅助类中的静态方法(在这种情况下,您必须将上下文作为参数传递,并注意不要创建对此上下文的引用以避免内存泄漏)。

答案 1 :(得分:0)

你可以使用 numberOfQuestions = getSharedPreferences(Constants.NUM_OF_QUESTIONS, 0);
初始化它的价值。然后在您的应用程序中的任何位置访问它