1

好的,我正在关注一本 android 书籍,他们正在使用扩展 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 或者这不是做这件事的方式,有人可以帮我明白此事?

4

1 回答 1

2
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字符串。此外,您不需要扩展任何 Preference Activity/Fragment。putgetStringputString

于 2012-08-13T16:29:24.547 回答