此论坛已多次询问此问题。但我觉得还需要为我清除。
public class PrefTest extends Activity {
public Button bt_start= null;
SharedPreferences mSharedPreferences;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
bt_start = (Button) findViewById(R.id.button1);
bt_start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("TEST","");
PreferenceManager.setDefaultValues(getApplicationContext(),
R.xml.settings_org, true);
mSharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
Boolean test = false;
test = mSharedPreferences.getBoolean("auto_launch_key", true);
Log.d("TEST","test = "+test);
}
});
super.onCreate(savedInstanceState);
}
@Override
protected void onStart() {
super.onStart();
}
}
在上面的代码中
Log.d("TEST","test = "+test);
始终打印 true ,但我已将xml中的默认值设为false(如下所示)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="settings" >
<CheckBoxPreference android:key="auto_launcvh_key"
android:summaryOn="..."
android:summaryOff="---"
android:title="auto_launch_string" android:defaultValue="false" />
</PreferenceCategory>
</PreferenceScreen>
我希望setDefaultValues
从XML
获取默认值并初始化首选项。
我理解错了吗?
答案 0 :(得分:2)
<强>更新强>
仔细观察后,我发现您可能没有正确检索SharedPreference
对象。虽然我没有尝试过,但为了使这个测试工作,我假设您必须使用XML文件的名称调用getSharedPreferences (String name, int mode)
来获取存储XML文件中定义的值的对象。
getDefaultSharedPreferences (Context context)
州:
获取指向默认文件的SharedPreferences实例 由给定上下文中的首选框架使用。参数
context需要其值的首选项的上下文。 返回
可用于检索和侦听的SharedPreferences实例 至于偏好的价值。
您的文件似乎不是默认文件,因此您尝试调用的首选项不存在。
一般来说,处理首选项的方法是子类PreferenceActivity
,这将创建一个首选项界面,但我很感激你只是想写一个简单的测试。
此外,我认为在撰写问题时CheckBoxPreference android:key="auto_launcvh_key"
是一个拼写错误。我想我在第一次写这个答案时检查了密钥,它是CheckBoxPreference android:key="auto_launch_key"
<强> ORIGINAL 强>
首先,如果现在返回false,我会将test = mSharedPreferences.getBoolean("auto_launch_key", true);
更改为test = mSharedPreferences.getBoolean("auto_launch_key", false);
,然后系统中不存在首选项,因此您的环境存在问题。尝试清理项目并重新安装。
其次在文件中说明
readAgain - 是否重新读取默认值。注意:这不会 将首选项重置为默认值。为了那个原因 功能,使用getDefaultSharedPreferences(Context)并清除它 然后调用此方法,并将此参数设置为true。
因此,如果系统中的首选项已经存在为true,则不会覆盖,因此重新安装也应该对其进行排序。或者您可以尝试拨打clear()
上的mSharedPreferences
,然后拨打PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.settings_org, true);
如果这不起作用,您可以发布完整的XML。
答案 1 :(得分:1)
答案其实很简单。 偏好文件中的布尔值仅在它们为true时才会出现,因此在读取布尔值时需要将默认值设置为false:
test = mSharedPreferences.getBoolean("auto_launch_key", false);
因此,当xml中的首选项为true时,它将读为true,否则使用默认的getBoolean。我注意到在调试时没有任何布尔首选项,其中false为值。