通过代码编辑EditTextPreference

时间:2012-11-01 12:17:44

标签: android sharedpreferences android-preferences

我在preferenceTextPreference之后的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值。它还是 ””。

3 个答案:

答案 0 :(得分: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();
            }
        }
    }
}

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

我在你的代码中没有看到任何错误,但如果它有效,请尝试这个..

替换此

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

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

祝你好运。