【问题标题】:How to get access to values of preferences from Activity?如何从 Activity 访问偏好值?
【发布时间】:2013-02-01 10:41:52
【问题描述】:

我有以下显示首选项屏幕的代码:

Button showPreferences=(Button)findViewById(R.id.buttonShowPreferences);
showPreferences.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
    }           
});

Button logPreferences=(Button)findViewById(R.id.buttonLogPreferences);
logPreferences.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String editText=prefs.getString("edit_text", "default_edit_text_value");
        boolean checkBox=prefs.getBoolean("check_box", true);
        String list=prefs.getString("list", "default_list_value");

        Log.i("edit_text_value", editText);
        Log.i("check_box_value", String.valueOf(checkBox));
        Log.i("list_value", list);
    }

});

如您所见,第二个按钮用于从首选项中获取值,但存在问题:我总是从 getString()、getBoolean() 方法的第二个参数中获得默认值!

PreferenceActivity 类的布局:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:key="first_screen_key"
        android:summary="First summary"
        android:title="First title" >
        <CheckBoxPreference
            android:persistent="true"
            android:title="Check Box Title"
            android:key="check_box_key"
            android:defaultValue="false"/>
        <ListPreference 
            android:persistent="true"
            android:title="List Title"
            android:key="list_key"
            android:entries="@array/entries"
            android:defaultValue="second_value"
            android:entryValues="@array/entries_values"/>
        <EditTextPreference 
            android:persistent="true"
            android:title="Edit Text Title"
            android:key="edit_text_key"
            android:defaultValue="Edit Text Value"/>
    </PreferenceCategory>

</PreferenceScreen>

【问题讨论】:

  • this 帖子可能对你有帮助

标签: java android


【解决方案1】:

您的代码的问题是您的密钥与您在偏好xml中设置的密钥不对应。例如,在行:

String editText=prefs.getString("edit_text", "default_edit_text_value");

但是“edit_text”在哪里?

在您的 xml 中,密钥被命名为:android:key="edit_text_key" 所以你应该用“edit_text_key”替换“edit_text”

【讨论】:

    【解决方案2】:

    1.你可以在DDMS->File Explorer->data->data->your package->shared_prefs->*_preferences.xml中看到xml文件

    2.将“edit_text”/“check_box”/“list”替换为“check_box_key”/“list_key”/“edit_text_key”。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2016-03-26
      相关资源
      最近更新 更多