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" />

私の活動の 1 つで、値を読み取りました。しかし問題は、ユーザーが何も入力しない場合 ("")、アプリがクラッシュすることです。確かに、アクティビティで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 に答える