
PreferenceActivity, קיימת PreferenceFragment שמציגה מסך הגדרות, שומרת אותו אוטומטית ב-shared preferences ומציגה אותו מחדש. ההרצאה בונה מסך כזה ומטפלת בכמה הבדלים מ-PreferenceActivity.xml יוצרים settings.xml עם PreferenceScreen, בתוכו PreferenceCategory לאימייל, CheckBoxPreference (מפתח ו-title "I want to receive e-mails") ו-EditTextPreference (title "enter your email") שתלוי בתיבת הסימון.SettingsFragment שיורשת מ-PreferenceFragment. היא מגיעה מהספרייה הרגילה ולא מ-support. מוחקים את ה-layout וה-onCreateView, ודורסים onCreate עם addPreferencesFromResource(R.xml.settings).menu_main עם פריט Settings ו-onClick, ודורסים onCreateOptionsMenu עם getMenuInflater().inflate.FrameLayout בשם frameLayoutContainer, ובלחיצה על Settings יוצרים את הפרגמנט (אם עדיין null) וקוראים ל-getFragmentManager() (לא support) עם replace ו-commit. משתמשים ב-replace כי אפשר ללחוץ כמה פעמים על התפריט.onCreate משיגים את getPreferenceScreen(), את ה-shared preferences דרך PreferenceManager.getDefaultSharedPreferences(getActivity()), ואת ה-EditTextPreference עם findPreference וקאסטינג. קוראים את האימייל עם getString ומציגים אותו ב-setSummary.setOnPreferenceChangeListener, ובתוכו קוראים ל-setSummary עם הערך החדש ומחזירים true כדי לשמור אותו.onActivityCreated קוראים ל-getView().setBackgroundColor עם הצבע הדפולטי של אקטיביטי.addToBackStack(null) לפני commit.PreferenceFragment לא מהספרייה support, זה לא עבד. דורסים onBackPressed במיין אקטיביטי: אם getFragmentManager().getBackStackEntryCount() שונה מ-0, קוראים ל-popBackStack().PreferenceFragment אינה חלק מספריית ה-support, ולכן משתמשים ב-getFragmentManager ולא ב-getSupportFragmentManager.PreferenceFragment באפליקציה שבנויה על פרגמנטים במקום PreferenceActivity.הטקסט המלא של הדקות הראשונות בהרצאה «Preference Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כשלמדנו על shared preferences ראינו שיש משהו שנקרא preference activity שמאפשרת להציג activity שיהיה עודית עבור קבלת מידע מהמשתמש ושמירת המידע הזה אוטומטית בשארד פרפרנס וכמובן הצגת המידע הזה מחדש.
כמובן המידע הזה הוא מיועד להיות הגדרות של המשתמש, כל מיני preferences, הגדרות שהמשתמש רוצה ברמת האפליקציה. בדיוק כמו שיש Preference Activity, יש גם Preference Fragment.
בסרטון הזה אנחנו הולכים לראות איך אנחנו יכולים לעבוד עם Preference Fragment, ויש איזה כמה דברים קטנים שחשוב להבין ושהם טיפה שונים מפרפרנס Activity. אז דבר ראשון, מה שאנחנו רוצים לעשות זה להגדיר את הפרפרנס שלנו, את ההעדפות.
את זה עשינו בתיקייה מיוחדת שאוספנו ל-Resources, והתיקייה שאוספנו הייתה תיקיית XML. אז בואו נעשה את זה בדיוק אותו הדבר. בתוך תיקיית XML אנחנו הולכים להוסיף XML Resource File, ואנחנו הולכים לקרוא לו settings.xml, בואו נבצע אוקיי, והנה כבר אנחנו רואים את קובץ ה-settings שנמצא בו ב-XML,
והוא נקרא preference screen, כלומר, התגית הראשית שלו מיועדת עבור preference activity או preference fragment. אנחנו הולכים להגדיר כמה preferences הם ממש קטנים, ופרפרנס 1 או 2, רק בשביל להבין את הרעיון.
ומה שאנחנו רוצים לעשות זה להגדיר preference category עבור e-mail. בתוך הקטגורי, קטגוריה חדשה שאנחנו מגדירים בתוך הסקרין הזה, אנחנו רוצים Checkbox Preference, ואנחנו רוצים בתוכו קודם כל איזשהו key, ובואו נקרא לו Checkbox Preference Agree, הרעיון והאם אנחנו מעוניינים לקבל e-mail כן או לא.
Title, בואו נגדיר, I want to receive e-mails, ובעצם ה-title שאנחנו נותנים בצורה כזאת. עכשיו, אחרי שהיוזר מסמן שהוא מסכים לקבל אימייל, אנחנו גם רוצים לקבל ממנו את כתובת האימייל.
אז בואו נגדיר פה Edit Text Preference, בואו נגדיר פה מפתח, שזה השם שלה, תגיד בעצם, Edit Text Preference Email, ואנחנו רוצים title, enter your email.
ואנחנו רוצים שזה יהיה תלוי בצ'קבוקס פרפרנס שהגדרנו למעלה. אז בואו נגדיר את זה בצורה כזאת. והנה יש לנו עכשיו גם קטגורי, גם צ'קבוקס וגם edit text עבור הפרפרנס.
אז אחרי שהגדרנו בדיוק את הרכיבים השונים שמוצגים במסך, בשלב הזה אנחנו יכולים לגשת וליצור פרגמנט. נלחץ Add New Fragment, נגדיר Fragment Blank, ונקרא לפרגמנט הזאת Settings Fragment.
לא נבצע את זה כמו תמיד, יש לנו פה רק Settings, Good. נבצע Finish, והדבר הראשון שאנחנו רוצים לעשות אחרי שטיפה נסדר פה את הקוד, זה לא לרשת מפרגמנט, אלא לרשת מפרפרנס פרגמנט.
עכשיו, פרפרנס פרגמנט, אנחנו רואים אותו כאן, הוא לא מגיע מספורט לייברירי, הוא מגיע מהאנדרואיד לייברירי הרגילה, ולכן אנחנו לא נתעסק עם כל הקונספט של הספורט בדוגמה הזאת.
עכשיו אם אנחנו preference fragment אז אנחנו הולכים להציג את קובץ ה-XML הזה בתור המסך. אין לנו layout ולכן אנחנו יכולים להיפטר מה-fragment settings של ה-layout שאוספנו.
בואו נבצע כאן delete, קצה אוקיי וכמובן אין לנו כאן עכשיו את ה-fragment settings ולמעשה אין לנו בכלל onCreateView. בואו ניפטר בכלל מאון קריאייטביו, אנחנו צריכים לדרוס את און קריאייט.
באון קריאייט, לאחר הגדרת הסופר, אנחנו רוצים להגדיר את הדבר הבא. add reference from resource, ולתת את קובץ הרסורס, r.xml.settings, וכעת אם אנחנו נציג את הפרגמנט הזאת, אז בעצם הקובץ הזה של ה-XML יוצג, וזה מה שאנחנו נראה.
אז איפה אנחנו רוצים להציג את הפרגמנט? בואו נבצע את זה בתפריט Settings. מקשי מניע ל-Resources, Add Android Resource Directory. אנחנו רוצים לבחור Menu, ואנחנו רוצים להוסיף לתקיית המניו, קובץ Menu Resource File, בואו נקרא לו Menu Underline Main.
כי זה התפריט הראשי, בתוך המניו הזה אנחנו רוצים להגדיר אייטם ולאייטם הזה אנחנו רוצים לתת title settings ואנחנו רוצים גם onclick שזה יהיה הכי פשוט menu item settings underline onclick ואנחנו רוצים שהאירוע של ה-onclick יהיה במיין אקטיביטי, אז בואו נבחר פה create onclick event handler, במיין
אקטיביטי, אוקיי, כאן אנחנו בעצם רוצים להעלות את הפרגמנט או להציג את הפרגמנט, כי זה פרגמנט של פרפרנס, אבל בשביל שבכלל התפריט הזה יוצג, אנחנו צריכים לדרוס את onCreateOptionsMenu, ובתוכו מה שאנחנו רוצים לעשות זה get menu inflator וto inflate את R.menu.menu main ולשלוח את המניו, המניו שהתקבל הפונקציה.
בסופו של דבר אנחנו רוצים להחזיר 2 כי אכן הכל בסדר והצלחנו להציג את הלחצן. אוקיי, מה אנחנו בעצם רוצים לבצע כאן באזור הגלובלי? Private Settings Fragment, נבנה רק Reference, ובתוך המניו בואו נבצע בדיקה האם ה-Setting Fragment סונל.
זה אומר שעדיין לא יצרנו אובייקט ממנו. אם לא יצרנו אובייקט, בואו נבצע יצירה של אובייקט Settings Fragment, והדבר הבא שאנחנו רוצים לעשות זה להציג, במקום לקרוא לגט Support Fragment Manager, אנחנו צריכים לקרוא לגט פרגמנט מנג'ר.
למה? כי ראינו שכל הקונספט הזה של הפרפרנס פרגמנט בעצם לא שייך לתקיעת הספורט, אלא שייך לפרגמנט הישן יותר. ולכן אנחנו משתמשים בגט פרגמנט מנג'ר. בואו נתחיל טרנזקציה, נבצע ריפלייס, למה ריפלייס ולא אד?
מפני שהיוזר יכול ללחוץ מספר פעמים על התפריט הזה של ה-settings, וכל פעם אנחנו בעצם רוצים להחליף את הקונטיינר הקודמת, את הפריגמנט הקודמת שהצגנו.
וכמובן ראינו בעבר ש-replace בפעם הראשונה מתנהגת בדיוק כמו add, ככה שזה בדיוק מתאים לנו. עכשיו אנחנו רוצים את הקוד של הקונטיינר, לכן בשלב הזה בואו נחזור ל-layout, וב-Layout נחליף את ה-LinearLayoutRoot הזה שיש לנו פה ב-FrameLayout, ואנחנו רוצים להגדיר לו ID, וזה יהיה FrameLayoutContainer,
ובעצם ה-FrameLayout שאחראי על ההצגה של הפרגמנט. עכשיו, אנחנו יכולים להציג כאן פרגמנט אחרת, שהיא לא קשורה לסטינגס פרגמנט שלנו, ובאיזשהו שלב כשלוחצים על התפריט settings להחליף ולהציג את הפריגבנט שלנו.
עכשיו יכול להיות מצב שיש לנו פה גם כל מיני רכיבים אחרים, לדוגמה TextView, זה ממש בסדר. בואו נגדיר match parent בכדי שהוא יתפוס את הכל ונגדיר לו איזשהו TextSize של 30 ונגדיר לו Text של MainActivity נכדי שנדע שאנחנו במיין אקטיביטי, וגם נשים את זה באמצע על ידי Gravity Center.
אז הנה יש לנו עכשיו את המיין אקטיביטי, ומוצג פה איזה שהוא layout שיש לו כל מיני רכיבים,