2013-04-18 11 views
7

मैं कस्टम PreferenceScreen पर काम कर रहा हूं, मैंने PreferenceActivity का उपयोग कर सेटिंग पृष्ठ के लिए एक कस्टम स्क्रीन बनाई है।कस्टम वरीयता स्क्रीन के डेटा को गतिशील रूप से बदलें

नीचे मेरी वरीयता स्क्रीन है।

enter image description here

मुद्दा: - मैं गतिशील डेटा डाउनलोड का बिल्ला बदलने की जरूरत है। इस लेआउट को प्राप्त करने के लिए मैंने इस question का पालन किया। मैंने पहले ही उस प्रश्न के सभी उत्तर की कोशिश की लेकिन एकल जवाब नहीं दे रहा।

क्या वरीयता के अंदर देखने के लिए कोई अन्य तरीका है?

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

अपनी सेटिंग xml फ़ाइल कोड – Pratik

+0

चेक अद्यतन प्रश्न पोस्ट ... मेरी कोड है कि प्रश्न के रूप में एक ही है, यह सवाल .... –

+1

कि आप वरीयताओं के बजाय गतिविधि का उपयोग करने के लिए – stinepike

उत्तर

4

आप Preference उपवर्ग कर सकते हैं, onBindDialogView() अधिभावी - बस अपने पैकेज और वर्ग <com.example.app.BadgedPreference...> शामिल करने के लिए <Preference...> से XML को बदलने के लिए याद रखें:

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

अपने BadgedPreference हैं आपके परिवर्तन को संभालने के लिए एक विधि है, आप इसे थोड़ा और आसानी से उपयोग कर सकते हैं - आपकेके भीतर से:

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

इससे भी अधिक बस, आप एक मानक Preference, बस शैली अपने सारांश क्षेत्र एक 'बिल्ला' के रूप में उपयोग कर सकते हैं, तो आप शामिल सारांश क्षेत्र का उपयोग मान सेट कर सकते हैं:

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

अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।

@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)); 
    } 

आप मानक पसंद का उपयोग करते हैं तो आप कुछ इस तरह की कोशिश कर सकते हैं::

+0

धन्यवाद, मैंने वरीयता वर्ग के साथ किया था .. –

+0

धन्यवाद, खुश आपने इसे काम किया है। :) – CodeShane

0

आप OnSharedPreferenceChangeListener कुछ इस तरह लागू कर सकते हैं

/** 
* 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())); 
     } 
    } 

} 

}

आप कस्टम वरीयता उपयोग करते हैं, आप सबकुछ कर सकते हैं, और आप सेटसमरी (इंट वैल्यू)

0 ओवरराइड कर सकते हैं
@Override 
public void setSummary(int value) { 
    setSummary(String.valueOf(value)+" ...."); 
} 
संबंधित मुद्दे