【问题标题】:Set Preferences in android using shared preferences使用共享首选项在 android 中设置首选项
【发布时间】:2016-07-04 04:14:37
【问题描述】:

我正在尝试为测试应用构建设置页面。在代码中,我使用的是 PreferenceActivity 类。当我从设置页面设​​置一些设置时,我可以使用以下方法在应用程序的任何位置检索该值。

SharedPreferences SP;
SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String username = SP.getString("username", "bob");

我还可以在代码中的任何位置设置键值。提供上下文后就像下面的方法一样。

SharedPreferences.Editor edit;
edit.putString("username", "bob");
edit.commit();

问题是,当我打开设置页面时,“用户名”字段没有更新为“鲍勃”。我想在设置活动中反映 SharedPreferences 变量的更改值,这是在preferences.xml 上工作的扩展PreferenceActivity。我正在填充如下所示的首选项。

Settings.java

import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.os.Bundle;

public class Settings extends PreferenceActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
    }

    public static class MyPreferenceFragment extends PreferenceFragment
    {
        PrefManager prefManager;
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }

}

preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <EditTextPreference android:title="Your Name"
        android:key="username"
        android:summary="Please provide your username">
    </EditTextPreference>


</PreferenceScreen>

【问题讨论】:

  • 你能把你的代码贴在这里
  • 你正在设置"username"并得到"userName"
  • @Sharj 对不起。那是一个错字。
  • 如果用户之前保存了一些数据,您想在预填充的edittext中显示更新的值吗?
  • 我想在设置页面中反映username的更改值,只要它在代码中发生更改。 (假设我从代码中随机更改应用程序中的用户名)只想在设置页面中反映它。

标签: android android-preferences android-sharedpreferences


【解决方案1】:

我很困惑为什么你使用与我不同的方法,试试这样:

//get value
sp = getSharedPreferences("filename",MODE_PRIVATE);
sp.getString("username","bob");

//save value
sp = getSharedPreferences("filename",MODE_PRIVATE);
Editor edit= sp.edit();
edit.putString("username", "bob");
edit.commit();

【讨论】:

  • 我的做法一模一样。我的用户名值正在更新。但是我怎样才能在 PreferenceActivity 类的preferences.xml 中反映相同的东西。
【解决方案2】:
public class PrefsActivity extends PreferenceActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
    }

    public static class MyPreferenceFragment extends PreferenceFragment {
        PreferenceManager prefManager;

        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);
            final Preference pref = findPreference("username");
            pref.setSummary("your value which you alradey saved in preferences");
            pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    // do whatever you want with new value

                    // true to update the state of the Preference with the new value
                    // in case you want to disallow the change return false

                    pref.setSummary(newValue.toString());
                    return true;
                }
            });
        }


    }

}

【讨论】:

    【解决方案3】:

    使用马车 (https://github.com/beplaya/Wagon)。用于共享偏好的超级超级简单的注释。

    ...
    @Crate(key = "myPreferenceCrate", preference = true)
    public CrateExample crate;
    @WoodBox(key = "myPreferenceString", preference = true)
    public String value;
    ...
    wagon.pack(getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE));
    ...
    wagon.unpack(getSharedPreferences(PREFERENCES_NAME, MODE_PRIVATE));
    ...
    

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2012-09-20
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多