0

我在EditTextPreference之后的preferences.xml中有:

  <EditTextPreference
     android:name="@string/pref_test"
     android:defaultValue="0.6"
     android:inputType="numberDecimal"
     android:key="editTestPref"
     android:maxLength="5"
     android:summary=""
     android:title="@string/pref_test" />

在我的一项活动中,我阅读了该值。但问题是,如果用户不输入任何内容(“”),我的应用程序就会崩溃。当然我可以在活动中做一个 if 语句来检查它是否为空字符串,但我想做以下事情:

在 Preferences.java 中,我得到了preferenceEditText 的更改。如果用户输入“”,我想设置一个默认值:

if (preference.getKey().equals("editTestPref")) {

            if(newValue.equals(""))
            {
                final SharedPreferences.Editor prefsEditor = prefs.edit();
                prefsEditor.putString("editTestPref", "1");
                prefsEditor.commit();

                summary = "0.6"; // to update the summary of preference
            }
            else
            {
                summary= (String) newValue;
            }
        }

我也试过这段代码:

SharedPreferences customSharedPreference = getSharedPreferences(
         "myCustomSharedPrefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = customSharedPreference
                        .edit();
editor.putString("editTestPref", "1");
editor.commit();

两者都不起作用,它们不会更新 sharedPreference 值。它还是 ””。

4

3 回答 3

1

SharedPreferences.OnSharedPreferenceChangeListener像这样实现:

public class YourPrefsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    // ... your existing code ...

    @Override
    protected void onResume() {
        super.onResume();

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        // Set up a listener whenever a key changes
        sharedPreferences.registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if ("editTestPref".equals(key)) {
            String val = sharedPreferences.getString("editTestPref", "");
            if (val == null || val.trim().equals("")) {
                val = "0.6"; // <-- your default value
                sharedPreferences.edit().putString(key, val).commit();
            }
        }
    }
}

当用户更改首选项值时调用该方法,并检查他是否输入了空字符串。如果是这样,则该值将替换为您的默认值。

于 2012-11-01T12:34:40.093 回答
0

您应该使用if(newValue.isEmpty())而不是检查字符

于 2012-11-01T12:22:08.307 回答
-1

我在您的代码中没有发现任何问题,但如果可行,请尝试此操作..

替换这个

prefsEditor.putString("editTestPref", "1"); 

prefsEditor.putString("editTestPref", String.valueof(1));

好运。

于 2012-11-01T12:31:51.823 回答