不使用xml中的默认值初始化首选项

时间:2012-01-03 16:03:51

标签: android preferences sharedpreferences

此论坛已多次询问此问题。但我觉得还需要为我清除。

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>

我希望setDefaultValuesXML获取默认值并初始化首选项。

我理解错了吗?

2 个答案:

答案 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为值。