הנה החלק השני בנושא "Shared Preferences". החלק הראשון הציג מנגנון פשוט לשמירת פרמטרים בפורמט של key/value.
החלק הזה יציג את ה-Preferences Framework, שכולל תוספת ווידגטים מיוחדים ב-UI לקביעת ושמירת ערכי הפרמטרים ב-Preferences.
הווידגטים של - Preferences Framework אותם נכיר:
- CheckBoxPreference - מגדיר כפתור בחירה CheckBox.
- EditTextPreference - מגדיר חלון EditText להכנסת טקסט חופשי.
- ListPreference - הגדרת List כולל כפתורי בחירה.
- RingtonePreference - בחירת מצב ה-rington.
הערה: בנוסף ל4 הווידגטים הנ"ל, קיים אחד נוסף, ה-DialogPreference, אך מנסיוני הוא אינו עובד (אשמח להערות בנושא). 
נכיר גם שני מאגדי קבוצות של ווידגטים, שמאפשרים בניית תצוגה היררכית של הווידגטים:
- PreferenceCategory - מאגד קבוצה של ווידגטים. הוא יוצר חציצה + כותרת בין הווידגטים המאוגדים בקטגוריה לבין הווידגטים שמופעים לפניהם. נדגים את זה כמובן.
- PreferenceScreen - מאגד קבוצה של ווידגטים ומציג אותם במסך נפרד.
 בניית מסך ה-UI עבור ה-Preferences נעשה בתוך קובץ xml נפרד, שמכיל את 4 סוגי הווידגטים ושני סוגי המאגדים הנ"ל. נראה זאת בהמשך.
נעבור ישר לדוגמא, נתחיל בהצגת צילומי מסך של ה-UI:
המסך הראשי: שני כפתורי הפעלה+טקסט הסבר.
מסך ה-Preferences הראשי: שימו לב לחציצה+כותרת של ה-Category.  ה-category כאמור הוא ווידגט לחציצה.
התצוגה שהתקבלה בעיקבות לחיצה על האלמנט השני - EditText. מופיע ה-EditText ויידגט. הטקסט שיוקלד ישמר כמובן ב-Preferences:
התצוגה שהתקבלה בעקבות נגיעה בשורה השלישית במסך ה-Preferences ראשי, ה-ListPreferences 
לחיצה על כפתור ה- Show Preferences במסך הראשי: מופיע Toast Message שמציג את ערכי כל ששת הפרמטרים שהגדרנו:
נעבור לקוד.
התוכנית תומכת בשני מסכי תצוגה:
ה-Activity הראשי תומך במסך הראשי - ראה תמונה למעלה
ה- PreferencesEdit class שפורס ומציג את ה-Preferences UI.
הקבצים בהם נתעניין:
- PreferencesEdit.java: הקובץ שפורס את ה-UI של ה-Preferences.
- Preferences.xml: קובץ ה-xml בו מוגדר ה-UI של ה-preferences.
- array.xml: קובץ עזר שמכיל פרמטרים של ה-ListPreferences
- PrefsFramework.java: ה-java עם ה-Activity הראשי - המסך הראשי.
הקובץ הראשון:  PreferencesEdit.java
import android.os.Bundle;
import android.preference.PreferenceActivity;
- public class PreferencesEdit extends PreferenceActivity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.preferences);
- }
- }
קשה היה לצפות למשהו פחות מורכב מזה. 
שורה 1: extends PreferenceActivity. זהו ה-class אותו יש לרשת.
שורה 5: זוהי שורת המפתח, שפורסת את קובץ ה-xml אותו נציג מייד ומייצרת את ה-UI בהתאם.
הקובץ השני: preferences.xml.
הקובץ נמצא ב-/res/xml
מתאר את תצוגת הPreferences UI. ראינו למעלה את הפריסה שלו לתצוגה.
<PreferenceScreen
 xmlns:android="http://schemas.android.com/apk/res/android">
 <PreferenceCategory android:title="Checkbox Category">
  <CheckBoxPreference
   android:key="checkbox1"
   android:title="Checkbox Preference 1"
   android:summary="Mark selection"
  />
  </PreferenceCategory>
 <PreferenceCategory android:title="EditTextPreference Category">
  <EditTextPreference
   android:key="editText"
   android:title="Edit Text"
   android:summary="Click to enter name"
   android:dialogTitle="Insert Text"
   android:dialogMessage="Dialog Message"
   android:positiveButtonText="yes"
   android:negativeButtonText="no"
  />
   </PreferenceCategory>
 <ListPreference
   android:key="email"
   android:title="ListPreference"
   android:summary="Click to preferences list"
   android:entries="@array/names"
   android:entryValues="@array/emails"
   android:dialogTitle="Select a name" />
  <PreferenceCategory android:title="Rington Category">
  <RingtonePreference
   android:key="ringtone"
   android:title="Ringtone Preference"
   android:ringtoneType="alarm" 
   android:positiveButtonText="yes"
   android:showDefault="true"
   android:summary="Select a ringtone"
  />
  </PreferenceCategory>
   <PreferenceScreen
   android:key="prefscreen1"
   android:title="PreferenceScreen"
   android:summary="Click for another preferences screen">
  <CheckBoxPreference
   android:key="checkbox2"
   android:title="Checkbox Preference 2"
   android:summary="Mark selection"
  />
  <CheckBoxPreference
   android:key="checkbox3"
   android:title="Checkbox Preference 3"
   android:summary="Mark selection"
  />
  </PreferenceScreen>
</PreferenceScreen>
נתעכב על ה-ListPreferences :
מדובר בווידגט המציג רשימת פרמטרים עם כפתורי רדיו, ראה צילום למעלה.
- <ListPreference
- android:key="email"
- android:title="ListPreference"
- android:summary="Click to preferences list"
- android:entries="@array/names"
- android:entryValues="@array/emails"
- android:dialogTitle="Select a name" />
שורה 2:  זהו ה-key של הפרמטר, לצורך שמירה ב- preferences. 
שורה 3: כותרת. ראה צילום מסך למעלה.
שורה 4: "טיפ" נוסף - ראה צילום מסך למעלה.
שורה 5: רשימת הפריטים שתופיע עם הנגיעה - ראה רשימת השמות למעלה (david, yosi, of, sela). הרשימה נמצאת בקובץ arrays.xml בספרית res/values.
שורה 6: רשימת הערכים שמתייחסת לרשימת הפריטים הנ"ל.נמצאת גם בקובץ arrays.xml .
שורה 7:  dialogTitle - הכותרת שתופיע מעל הרשימה - ראה צילום מסך למעלה.
הקובץ השלישי: arrays.xml שמכיל את שתי הרשימות עבור ה-ListPreferences.
<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string-array name="emails">
  <item>"david@gmail.com"</item>
  <item>yosi@walla.co.il</item>
  <item>nof.yam@barak.net.il</item>
  <item>sela@yahoo.com</item>
 </string-array>
 <string-array name="names">
  <item>david</item>
  <item>yosi</item>
  <item>nof</item>
  <item>sela</item>
 </string-array>
</resources>
הרשימה הראשונה, מכילה את השמות  שיוצגו ב-dialog ( שורה 6 למעלה, entries) 
הרשימה השניה - names - מכילה את הערכים (שורה 7 למעלה).
בדוגמא הנ"ל, הערך שמוצמד לכל שם היא כתובת אימייל. זהו כמובן הערך שישמר בזיכרון. ראה צילום מסך - לחיצה על כפתור Show Preferences.
הקובץ הרביעי: ה-Activity הראשי.
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class PrefsFramework extends Activity {
 String checkbox; 
 String editTextContent;
 String list;
 String ringtone; 
 String checkbox2;
 String checkbox3;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button buttonPrefsShow = (Button) findViewById(R.id.button_prefs_show); 
  buttonPrefsShow.setOnClickListener(new OnClickListener(){
         public void onClick(final View v) {
          Context context = getApplicationContext();
          Toast.makeText(context, "checkbox ="+checkbox+
            "\ntext="+editTextContent+
            "\nlist="+list+
            "\nringtone="+ringtone+
            "\ncheckbox2="+checkbox2+
            "\ncheckbox2="+checkbox3
            , Toast.LENGTH_LONG).show();
         }
  });
  Button buttonPrefsSet = (Button) findViewById(R.id.button_prefs_set); 
  buttonPrefsSet.setOnClickListener(new OnClickListener(){
         public void onClick(final View v) {
          Context context = getApplicationContext();
          Intent intentPrefsSet =  new Intent(context, PreferencesEdit.class);
           startActivity(intentPrefsSet);
         }
  });
 }
 @Override
 public void onResume() {
  super.onResume();
  SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
  checkbox = new Boolean(prefs.getBoolean("checkbox1", false)).toString();
  editTextContent = prefs.getString("editText", "<unset>");
  list = prefs.getString("email", "<unset>");
  ringtone = prefs.getString("ringtone", "<unset>");
  checkbox2 = new Boolean(prefs.getBoolean("checkbox2", false)).toString();
  checkbox3 = new Boolean(prefs.getBoolean("checkbox3", false)).toString();
 } 
}
ממומשות שתי מתודות:
onCreate: בתוכה מוגדרים ה-callbacksשל שני הכפתורים.
onResume: מופעלת כשחוזרים ממסך ה-Preferences UI. כאן נשלפים ששת פרמטרי ה-preferences מהזיכרון.





 
 
הקישור להורדה לא עובד
השבמחקמקווה שזה עובד עכשיו.
השבמחק