【问题标题】:How to use shared Preferences on Android?如何在 Android 上使用共享首选项?
【发布时间】:2012-06-07 20:00:51
【问题描述】:

我正在创建一个非常简单的应用程序,它只有一个用户可以使用的搜索栏。 我的代码如下所示:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    int number=50;
    SeekBar sb = (SeekBar)findViewById(R.id.slider);
    sb.setMax(100);
    sb.setProgress(number);
    sb.setOnSeekBarChangeListener(this);
}

@Override
public void onProgressChanged(SeekBar v, int progress, boolean isUser) {
    TextView tv = (TextView)findViewById(R.id.percent);
    tv.setText(Integer.toString(progress)+"%");


}

我想要做的是存储搜索栏状态,当应用程序被终止并且用户再次打开它时,最后一次更改显示在搜索栏上,而不是默认值。 所以我必须在我的 int number 变量上使用共享首选项?我不明白我该怎么做,因为当应用程序再次启动时,int number=50 行将再次运行,因此值将再次变为 50。

【问题讨论】:

  • 你有没有在提问之前搜索过任务..?

标签: java android database preferences shared


【解决方案1】:

StackOverflow 不是您的研究助手。您尝试完成的任务可笑简单。

更多信息请咨询documentation

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SharedPreferences sp;
        SharedPreferences.Editor spe;
    
    
        sp = PreferenceManager.getDefaultSharedPreferences(this);
        spe = sp.edit();
    
    
        int number= sp.getInt("seekNum", 50);
        SeekBar sb = (SeekBar)findViewById(R.id.slider);
        sb.setMax(100);
        sb.setProgress(number);
        sb.setOnSeekBarChangeListener(this);
    }
    
    @Override
    public void onProgressChanged(SeekBar v, int progress, boolean isUser) {
        TextView tv = (TextView)findViewById(R.id.percent);
        tv.setText(Integer.toString(progress)+"%");
    
    
    }
    
    
    @Override
    public void onStop(){
        super.onStop();
    
        spe.putInt("seekNum", sb.getProgress());
        spe.commit();
    }
    

    【讨论】:

    • 好吧,我把函数放在外面:SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor spe = sp.edit(); SeekBar sb = (SeekBar)findViewById(R.id.slider);这样我的所有功能都可以看到,但它在运行时崩溃
    【解决方案3】:

    这可以根据您需要的任何数据类型进行修改:

    private void loadSettings(){
        if(prefs == null) prefs = mContext.getSharedPreferences(PREF_KEY, 0);
    
        yourString = prefs.getString(YOUR_KEY, ""); 
    }
    private void saveSettings(){
        if(prefs == null) prefs = mContext.getSharedPreferences(PREF_KEY, 0);
    
        SharedPreferences.Editor prefsEd = prefs.edit();
    
        prefsEd.putString(YOUR_KEY, yourString);
    
        prefsEd.commit();
    }
    

    【讨论】:

      【解决方案4】:

      您可以同时使用 sharedPreference 或 savedInstanceState。

      查看Saving Android Activity state using Save Instance State

      当然,在那个硬编码的赋值中总是做 10 的值。如果你决定走那条路,你需要从 sharedpref 中提取该值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        • 2015-07-20
        相关资源
        最近更新 更多