共享偏好值未保存

时间:2016-05-02 06:14:14

标签: java android listview android-fragments sharedpreferences

我正在开发一个应用程序,其中用户在共享首选项中输入一个值,并且正在检索以减去卡路里数。

现在,我的卡路里应用程序硬编码为2000.用户每天的消耗限制为2000。我希望用户能够更改共享首选项消耗的数量,但由于某种原因,它没有被保存。这就是我对它进行硬编码的原因。

PreferenceScreenActivity.java

match

activity_preference.xml

public class PreferenceScreenActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preference);

        // Replace the default view with the preference fragment

        getFragmentManager().beginTransaction().replace(R.id.preference_container,
        new PreferenceScreenFragment()).commit();
    }

    public static class PreferenceScreenFragment extends PreferenceFragment 
    {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.activity_preference);
        }
    }
}

FragmentHome.JAVA

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="User Settings">
        <EditTextPreference
            android:title="Daily Calorie Amount"
            android:inputType="number"
            android:defaultValue="2000"
            android:key="@string/prefs_key_daily_calorie_amount"
            android:summary="@string/prefs_description_daily_calorie_amount"
        />
    </PreferenceCategory>
</PreferenceScreen>

1 个答案:

答案 0 :(得分:0)

如我所见,您拥有CaloriesRemain变量和savePrefs()方法,但您无法使用varialbe和方法的值。

看,如果您使用PreferenceFragment,它会自动从SharedPreferences保存并加载您的首选项。

如果您需要在代码中使用SharedPreferences中的值,则应使用密钥(@string/prefs_key_daily_calorie_amount)来请求它们。

目前您使用CaloriesRemain = loadPrefs(formattedRemain, totalCalorie);,但不应使用formattedRemain,而应使用密钥@string/prefs_key_daily_calorie_amount。然后在代码中使用CaloriesRemain变量。

希望它有所帮助。