好的,我正在看一本安卓书,他们正在使用扩展PreferenceActivity的类向数独游戏添加设置,该类被意图调用,并且它所做的只是addPreferencesFromResource(R.xml.settings),此方法已被弃用并且不再起作用,这是本书中的代码:
package org.example.sudoku;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class Prefs extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings);
}
}
现在,我研究了此问题,发现您必须实例化PreferenceManager才能执行此操作,但是在示例中,我发现它们从PreferenceFragment扩展了Prefs类(而不是本书中的PreferenceActivity),因此我设法在代码如下:
/*
* this is for use from API version 11 and after...
*
*/
package org.example.sudoku;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
public class Prefs extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Make sure default values are applied. In a real app, you would
// want this in a shared function that is used to retrieve the
// SharedPreferences wherever they are needed.
PreferenceManager.setDefaultValues(getActivity(),
R.xml.settings, false);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings);
}
}
但这并不能解决问题,我不知道是否是因为我是从意图中调用此类并且此类扩展了PreferenceFragment而不是PreferenceActivy,或者这不是这样做的方法,有人可以帮我吗明白这一点?
最佳答案
final String PREF_SETTINGS_FILE_NAME = "PrefSettingsFile";
读取您的首选项变量的值。
SharedPreferences preferences = getSharedPreferences(PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
prefSettingsValue1= preferences.getInt("value1", 1); // default value of prefSettingsValue1 will be 1 in case you are trying to read a non-existent value. You can specify it according to your wish. (like I have done for the next value)
prefSettingsValue2= preferences.getInt("value2", 0);
prefSettingsValue3= preferences.getInt("value3", 1);
将值写入您的首选项变量。
SharedPreferences preferences = getSharedPreferences(PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("vaule1", prefSettingsValue1);
editor.putInt("value2",prefSettingsValue2);
editor.putInt("value3",prefSettingsValue3);
editor.commit();
注意:无需使用任何XML文件来存储首选项。只需将值保存在Preference变量中,然后在应用程序中读取它们。不仅是整数,还可以通过使用
get
和put
函数分别读取和写入getString
和putString
字符串。同样,您不需要扩展任何首选项活动/片段。