SORU
15 EYLÜL 2010, ÇARŞAMBA


PreferenceActivity: değer tamsayı olarak kaydet

EditTextPreference tercihlerimi basit bir aktiviteye gidin:

<EditTextPreference
    android:key="SomeKey"
    android:title="@string/some_title"
    android:summary="..."
    android:numeric="integer"
    android:maxLength="2"
/>

Bu yapılandırma değeri tamsayı olarak kaydedilen bir yolu var mı? Şimdi sadece sayı girmek için izin verir gibi görünüyor, ama değeri hala string olarak kaydedilir:

Arama:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int value = preferences.getInt("SomeKey", -1);

beni java.lang.ClassCastException: java.lang.String ve: atar

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String value = preferences.getString("SomeKey", "-1");

değeri alır başarılı.

Nasıl PreferenceActivity değeri kaydetmek için varsayılan olarak tam sayı olarak?

CEVAP
20 EYLÜL 2010, PAZARTESİ


EditTextPreference uzatmak:

public class IntEditTextPreference extends EditTextPreference {

    public IntEditTextPreference(Context context) {
        super(context);
    }

    public IntEditTextPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected String getPersistedString(String defaultReturnValue) {
        return String.valueOf(getPersistedInt(-1));
    }

    @Override
    protected boolean persistString(String value) {
        return persistInt(Integer.valueOf(value));
    }
}

Daha iyi onSetİnitialValue üzerine olurdu() ve setText() yöntem, ama sonra temel sınıfından bazı kod kopyalamak gerekir. Çözüm simplier, ama oldukça zordur, yukarıda - "dize" in yöntemleri ile bir şeyler yap. Bu sınıf daha da uzatmak için değil deneyin ;-)

XML onu kullanabilirsin:

<package.name.IntEditTextPreference
    android:key="SomeKey"
    android:title="@string/some_title"
    android:summary="..."
    android:numeric="integer"
    android:maxLength="2"
/>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • NPR

    NPR

    22 NİSAN 2006
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011