Android SDK使用PreferenceActivity添加设置

Android SDK使用PreferenceActivity添加设置,android,android-preferences,Android,Android Preferences,好的,我正在关注一本android书籍,他们正在使用一个扩展PreferenceActivity的类向数独游戏添加设置,这个类由一个intent调用,它所做的只是添加PreferencesFromResource(R.xml.settings),这种方法已经被弃用,不再有效,下面是这本书中的代码: package org.example.sudoku; import android.os.Bundle; import android.preference.PreferenceActivity;

好的,我正在关注一本android书籍,他们正在使用一个扩展PreferenceActivity的类向数独游戏添加设置,这个类由一个intent调用,它所做的只是添加PreferencesFromResource(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(而不是本书中的PreferenceActivity)扩展了Prefs类,我成功地处理了以下代码:

/*
 * 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文件来存储首选项。只需将这些值保存在首选项变量中,然后在应用程序中读取它们。不仅是整数,您还可以使用
getString
putString
函数分别读取和写入
get
put
字符串。此外,您不需要扩展任何首选项活动/片段。

是否有必要使用PreferenceActivity/PreferenceFragment?同样的功能也可以通过使用SharedReferences preferences=getSharedReferences(PREF_FILE_NAME,MODE_PRIVATE)来实现;如果你想按我的方式做,我可以与你分享整个代码。:)很好,是的,我会用任何一种方式去做,我还在努力学习如何去做这些事情,不管怎样,用你的方式去做有什么区别吗?等等。我会马上发布代码。