簡體   English   中英

Android SharedPreferences / PreferenceFragment無效

[英]Android SharedPreferences/PreferenceFragment not working

我最近研究了有關使用共享首選項處理應用程序首選項以及Android Developer Documentation中PreferenceFragment ,並做了以下簡單示例:

SettingsActivity.java

public class SettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(savedInstanceState == null)
            getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit()

    }

}

SettingsFragment.java

public class SettingsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }

}

RES / XML / settings.xml中

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

    <PreferenceCategory android:title="@string/pref_general_category">    

        <EditTextPreference
            android:key="@id/pref_key_apiBaseUri"
            android:title="@string/pref_apiBaseUri_title"
            android:defaultValue="@string/pref_apiBaseUri_default"
            android:persistent="true"
            android:inputType="text"
            android:singleLine="true" />

    </PreferenceCategory>

</PreferenceScreen>

其他的東西:

id        pref_key_apiBaseUri
string    pref_apiBaseUri_title       "Api Base Uri"
string    pref_api_baseUri_default    "http://acme.com/api/

問題

直截了當的東西,嗯? 我啟動了應用程序,轉到首選項菜單/活動, 首選項片段被充氣,我點擊了“ Api Base Uri ”。 彈出一個EditText對話框,我將“ http://acme.com/api ”更改為“ http://acme.com/api2 ”並按下確定。 現在,據我所知,文檔中,首選項應自動保存到共享首選項中 當我重新打開EditText對話框時,我看到我的更改已存儲。

但是,當我關閉活動(或應用程序)並再次返回設置時,默認值又回來了,沒有進行任何更改! 如何永久保存我的設置?

在settings.xml中,您有:

<EditTextPreference
    android:key="@id/pref_key_apiBaseUri"
    android:title="@string/pref_apiBaseUri_title"
    android:defaultValue="@string/pref_apiBaseUri_default"
    android:persistent="true"
    android:inputType="text"
    android:singleLine="true" />

您必須為key指定一個字符串,因為android:key的文檔說:

對於保留數據值的首選項,此屬性是必需的。 它指定在SharedPreferences中保存此設置值時系統使用的唯一鍵(字符串)。

看來你的pref_key_apiBaseUri是一個空字符串。 將其更改為有效的String並移至strings.xml:

<string name="pref_key_apiBaseUri">KEY</string>

然后用作:

<EditTextPreference
    android:key="@string/pref_key_apiBaseUri"
    ...

或者保持原樣,只需在id標簽前添加+ ,這將創建id,而id又用作鍵:

<EditTextPreference
    android:key="@+id/pref_key_apiBaseUri"
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM