2013-04-18 12 views
7

Verilerinizi özel olarak değiştiriyorum Özel PreferenceScreen üzerinde çalışıyorum, PreferenceActivity kullanarak ayarlar sayfası için özel bir ekran oluşturdum.Özel PreferenceScreen

Tercihler ekranım aşağıda.

enter image description here

Sayı: - Dinamik Yükleme verilerinin rozeti değiştirmeniz gerekir. Bu düzeni elde etmek için bunu question takip ettim. Zaten bu sorunun tüm cevabını denedim, ancak tek bir cevap vermedim.

İç tercihi olan Profili bulmanın başka bir yolu var mı?

settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<Preference android:title="@string/settings_user_profile" android:key="user_profile" android:summary="@string/settings_user_profile_desc" android:layout="@layout/setting_list"></Preference> 
<Preference android:title="@string/settings_download" android:key="download_data" android:summary="@string/settings_download_desc" android:layout="@layout/setting_list"></Preference> 
</PreferenceScreen> 
+0

Bu soruya .... – Pratik

+0

Kontrol güncellenen soru gönderebilir @ StinePike'ın önerisi, iyi –

+1

o iyi olacak mı bakmak, Kodum bu soruya aynıdır ... ayarınız xml dosyası kodu – stinepike

cevap

4

Sen onBindDialogView() basan, Preference alt sınıf - sadece paket ve sınıf <com.example.app.BadgedPreference...> içerecek şekilde <Preference...> XML değiştirmeyi unutmayın: sizin BadgedPreference Eğer

@Override 
protected void onBindDialogView(View v) { 
    super.onBindDialogView(v); 
    Log.v("onBindDialogView()", v.getClass().getSimpleName()); 
} 

Değişikliğinizi ele almak için bir yönteme sahiptir, bunu daha kolay kullanabilirsiniz -içinden:

Preference pref = (Preference)myPrefScreen.findPreference("download_data"); 
pref.setSummary("12"); 

:

PreferenceScreen myPrefScreen = (PreferenceScreen)getPreferenceScreen(); 
BadgedPreference bp = (BadgedPreference)myPrefScreen.findPreference("download_data"); 
// Custom method 
bp.setBadgeValue(12); 

Daha basitçe, o zaman dahil Özet alanını kullanarak bir değer girebilir bir 'rozeti' gibi standart Preference, sadece stil onun özeti alanını kullanabilirsiniz Herhangi bir sorunuz olursa haberim olsun. Eğer standart Tercihini kullanırsanız

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

     // Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
     .registerOnSharedPreferenceChangeListener(this);   
    } 

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

     // Unregister the listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
     .unregisterOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 

     //update summary 
     updatePrefsSummary(sharedPreferences, findPreference(key)); 
    } 

böyle bir şey deneyebilirsiniz:

+0

teşekkürler, Preference sınıfı ile yapmıştı .. –

+0

Teşekkürler, sevindim Çalıştın. :) – CodeShane

0

Böyle OnSharedPreferenceChangeListener şey uygulayabilir

/** 
* Update summary 
* 
* @param sharedPreferences 
* @param pref 
*/ 
protected void updatePrefsSummary(SharedPreferences sharedPreferences, 
    Preference pref) { 

if (pref == null) 
    return; 

if (pref instanceof ListPreference) { 
    // List Preference 
    ListPreference listPref = (ListPreference) pref; 
    listPref.setSummary(listPref.getEntry()); 

} else if (pref instanceof EditTextPreference) { 
    // EditPreference 
    EditTextPreference editTextPref = (EditTextPreference) pref; 
    editTextPref.setSummary(editTextPref.getText()); 

} else if (pref instanceof MultiSelectListPreference) { 
    // MultiSelectList Preference 
    MultiSelectListPreference mlistPref = (MultiSelectListPreference) pref; 
    String summaryMListPref = ""; 
    String and = ""; 

    // Retrieve values 
    Set<String> values = mlistPref.getValues(); 
    for (String value : values) { 
     // For each value retrieve index 
     int index = mlistPref.findIndexOfValue(value); 
     // Retrieve entry from index 
     CharSequence mEntry = index >= 0 
       && mlistPref.getEntries() != null ? mlistPref 
       .getEntries()[index] : null; 
     if (mEntry != null) { 
      // add summary 
      summaryMListPref = summaryMListPref + and + mEntry; 
      and = ";"; 
     } 
    } 
    // set summary 
    mlistPref.setSummary(summaryMListPref); 

} else if (pref instanceof RingtonePreference) { 
    // RingtonePreference 
    RingtonePreference rtPref = (RingtonePreference) pref; 
    String uri; 
    if (rtPref != null) { 
     uri = sharedPreferences.getString(rtPref.getKey(), null); 
     if (uri != null) { 
      Ringtone ringtone = RingtoneManager.getRingtone(
        getActivity(), Uri.parse(uri)); 
       pref.setSummary(ringtone.getTitle(getActivity())); 
     } 
    } 

} 

}

özel tercihini kullanırsanız, her şeyi yapabilir ve setSummary (int değeri)

'u geçersiz kılabilirsiniz
@Override 
public void setSummary(int value) { 
    setSummary(String.valueOf(value)+" ...."); 
} 
İlgili konular