PracticU

Preference Fragment

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Preference Fragment
מילון מושגים:
Fragment - ב-Android, רכיב ממשק הניתן לשימוש חוזר בתוך Activity, שמייצג חלק ממסך או התנהגות.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.

Preference Fragment
בדומה ל-PreferenceActivity, קיימת PreferenceFragment שמציגה מסך הגדרות, שומרת אותו אוטומטית ב-shared preferences ומציגה אותו מחדש. ההרצאה בונה מסך כזה ומטפלת בכמה הבדלים מ-PreferenceActivity.
השלבים העיקריים
1. קובץ הגדרות: בתיקיית xml יוצרים settings.xml עם PreferenceScreen, בתוכו PreferenceCategory לאימייל, CheckBoxPreference (מפתח ו-title "I want to receive e-mails") ו-EditTextPreference (title "enter your email") שתלוי בתיבת הסימון.
2. הפרגמנט: יוצרים SettingsFragment שיורשת מ-PreferenceFragment. היא מגיעה מהספרייה הרגילה ולא מ-support. מוחקים את ה-layout וה-onCreateView, ודורסים onCreate עם addPreferencesFromResource(R.xml.settings).
3. תפריט: יוצרים menu_main עם פריט Settings ו-onClick, ודורסים onCreateOptionsMenu עם getMenuInflater().inflate.
4. הצגה: מחליפים את השורש של ה-layout ב-FrameLayout בשם frameLayoutContainer, ובלחיצה על Settings יוצרים את הפרגמנט (אם עדיין null) וקוראים ל-getFragmentManager() (לא support) עם replace ו-commit. משתמשים ב-replace כי אפשר ללחוץ כמה פעמים על התפריט.
5. הצגת האימייל הקיים: ב-onCreate משיגים את getPreferenceScreen(), את ה-shared preferences דרך PreferenceManager.getDefaultSharedPreferences(getActivity()), ואת ה-EditTextPreference עם findPreference וקאסטינג. קוראים את האימייל עם getString ומציגים אותו ב-setSummary.
6. עדכון בזמן שינוי: נרשמים עם setOnPreferenceChangeListener, ובתוכו קוראים ל-setSummary עם הערך החדש ומחזירים true כדי לשמור אותו.
7. רקע: המסך מופיע שקוף כך שה-MainActivity נראית מאחור. ב-onActivityCreated קוראים ל-getView().setBackgroundColor עם הצבע הדפולטי של אקטיביטי.
8. כפתור Back: פרגמנטים לא נכנסים ל-back stack כברירת מחדל, ולכן Back סוגר את האפליקציה. מוסיפים addToBackStack(null) לפני commit.
9. עקיפת באג: כיוון ש-PreferenceFragment לא מהספרייה support, זה לא עבד. דורסים onBackPressed במיין אקטיביטי: אם getFragmentManager().getBackStackEntryCount() שונה מ-0, קוראים ל-popBackStack().
בבדיקה ההגדרות והאימייל נשמרים גם אחרי סגירה ופתיחה מחדש של האפליקציה, ו-Back חוזר ל-MainActivity.
שימו לב
- ה-PreferenceFragment אינה חלק מספריית ה-support, ולכן משתמשים ב-getFragmentManager ולא ב-getSupportFragmentManager.
- בלי טיפול ברקע, ה-MainActivity נראית מאחורי מסך ההגדרות.
אפשר עכשיו להשתמש ב-PreferenceFragment באפליקציה שבנויה על פרגמנטים במקום PreferenceActivity.
השיעור הבא בקורס: Dialog Fragment

פרקי ההרצאה: Preference Fragment

  1. 00:00

    מ-PreferenceActivity ל-PreferenceFragment

  2. 00:37

    יצירת קובץ settings.xml

  3. 01:34

    הגדרת CheckBox ו-EditText Preference

  4. 03:17

    יצירת SettingsFragment שיורש PreferenceFragment

  5. 04:37

    טעינה עם addPreferencesFromResource

  6. 05:16

    תפריט Settings ב-MainActivity

  7. 07:02

    הצגת ה-Fragment עם getFragmentManager

  8. 08:22

    קונטיינר FrameLayout ב-Layout

תמלול ההרצאה: Preference Fragment

הטקסט המלא של הדקות הראשונות בהרצאה «Preference Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:00

    כשלמדנו על shared preferences ראינו שיש משהו שנקרא preference activity שמאפשרת להציג activity שיהיה עודית עבור קבלת מידע מהמשתמש ושמירת המידע הזה אוטומטית בשארד פרפרנס וכמובן הצגת המידע הזה מחדש.

  2. 00:20

    כמובן המידע הזה הוא מיועד להיות הגדרות של המשתמש, כל מיני preferences, הגדרות שהמשתמש רוצה ברמת האפליקציה. בדיוק כמו שיש Preference Activity, יש גם Preference Fragment.

  3. 00:35

    בסרטון הזה אנחנו הולכים לראות איך אנחנו יכולים לעבוד עם Preference Fragment, ויש איזה כמה דברים קטנים שחשוב להבין ושהם טיפה שונים מפרפרנס Activity. אז דבר ראשון, מה שאנחנו רוצים לעשות זה להגדיר את הפרפרנס שלנו, את ההעדפות.

  4. 00:54

    את זה עשינו בתיקייה מיוחדת שאוספנו ל-Resources, והתיקייה שאוספנו הייתה תיקיית XML. אז בואו נעשה את זה בדיוק אותו הדבר. בתוך תיקיית XML אנחנו הולכים להוסיף XML Resource File, ואנחנו הולכים לקרוא לו settings.xml, בואו נבצע אוקיי, והנה כבר אנחנו רואים את קובץ ה-settings שנמצא בו ב-XML,

  5. 01:23

    והוא נקרא preference screen, כלומר, התגית הראשית שלו מיועדת עבור preference activity או preference fragment. אנחנו הולכים להגדיר כמה preferences הם ממש קטנים, ופרפרנס 1 או 2, רק בשביל להבין את הרעיון.

  6. 01:39

    ומה שאנחנו רוצים לעשות זה להגדיר preference category עבור e-mail. בתוך הקטגורי, קטגוריה חדשה שאנחנו מגדירים בתוך הסקרין הזה, אנחנו רוצים Checkbox Preference, ואנחנו רוצים בתוכו קודם כל איזשהו key, ובואו נקרא לו Checkbox Preference Agree, הרעיון והאם אנחנו מעוניינים לקבל e-mail כן או לא.

  7. 02:14

    Title, בואו נגדיר, I want to receive e-mails, ובעצם ה-title שאנחנו נותנים בצורה כזאת. עכשיו, אחרי שהיוזר מסמן שהוא מסכים לקבל אימייל, אנחנו גם רוצים לקבל ממנו את כתובת האימייל.

  8. 02:35

    אז בואו נגדיר פה Edit Text Preference, בואו נגדיר פה מפתח, שזה השם שלה, תגיד בעצם, Edit Text Preference Email, ואנחנו רוצים title, enter your email.

  9. 02:55

    ואנחנו רוצים שזה יהיה תלוי בצ'קבוקס פרפרנס שהגדרנו למעלה. אז בואו נגדיר את זה בצורה כזאת. והנה יש לנו עכשיו גם קטגורי, גם צ'קבוקס וגם edit text עבור הפרפרנס.

  10. 03:14

    אז אחרי שהגדרנו בדיוק את הרכיבים השונים שמוצגים במסך, בשלב הזה אנחנו יכולים לגשת וליצור פרגמנט. נלחץ Add New Fragment, נגדיר Fragment Blank, ונקרא לפרגמנט הזאת Settings Fragment.

  11. 03:38

    לא נבצע את זה כמו תמיד, יש לנו פה רק Settings, Good. נבצע Finish, והדבר הראשון שאנחנו רוצים לעשות אחרי שטיפה נסדר פה את הקוד, זה לא לרשת מפרגמנט, אלא לרשת מפרפרנס פרגמנט.

  12. 04:02

    עכשיו, פרפרנס פרגמנט, אנחנו רואים אותו כאן, הוא לא מגיע מספורט לייברירי, הוא מגיע מהאנדרואיד לייברירי הרגילה, ולכן אנחנו לא נתעסק עם כל הקונספט של הספורט בדוגמה הזאת.

  13. 04:19

    עכשיו אם אנחנו preference fragment אז אנחנו הולכים להציג את קובץ ה-XML הזה בתור המסך. אין לנו layout ולכן אנחנו יכולים להיפטר מה-fragment settings של ה-layout שאוספנו.

  14. 04:37

    בואו נבצע כאן delete, קצה אוקיי וכמובן אין לנו כאן עכשיו את ה-fragment settings ולמעשה אין לנו בכלל onCreateView. בואו ניפטר בכלל מאון קריאייטביו, אנחנו צריכים לדרוס את און קריאייט.

  15. 04:56

    באון קריאייט, לאחר הגדרת הסופר, אנחנו רוצים להגדיר את הדבר הבא. add reference from resource, ולתת את קובץ הרסורס, r.xml.settings, וכעת אם אנחנו נציג את הפרגמנט הזאת, אז בעצם הקובץ הזה של ה-XML יוצג, וזה מה שאנחנו נראה.

  16. 05:23

    אז איפה אנחנו רוצים להציג את הפרגמנט? בואו נבצע את זה בתפריט Settings. מקשי מניע ל-Resources, Add Android Resource Directory. אנחנו רוצים לבחור Menu, ואנחנו רוצים להוסיף לתקיית המניו, קובץ Menu Resource File, בואו נקרא לו Menu Underline Main.

  17. 05:49

    כי זה התפריט הראשי, בתוך המניו הזה אנחנו רוצים להגדיר אייטם ולאייטם הזה אנחנו רוצים לתת title settings ואנחנו רוצים גם onclick שזה יהיה הכי פשוט menu item settings underline onclick ואנחנו רוצים שהאירוע של ה-onclick יהיה במיין אקטיביטי, אז בואו נבחר פה create onclick event handler, במיין

  18. 06:25

    אקטיביטי, אוקיי, כאן אנחנו בעצם רוצים להעלות את הפרגמנט או להציג את הפרגמנט, כי זה פרגמנט של פרפרנס, אבל בשביל שבכלל התפריט הזה יוצג, אנחנו צריכים לדרוס את onCreateOptionsMenu, ובתוכו מה שאנחנו רוצים לעשות זה get menu inflator וto inflate את R.menu.menu main ולשלוח את המניו, המניו שהתקבל הפונקציה.

  19. 07:02

    בסופו של דבר אנחנו רוצים להחזיר 2 כי אכן הכל בסדר והצלחנו להציג את הלחצן. אוקיי, מה אנחנו בעצם רוצים לבצע כאן באזור הגלובלי? Private Settings Fragment, נבנה רק Reference, ובתוך המניו בואו נבצע בדיקה האם ה-Setting Fragment סונל.

  20. 07:26

    זה אומר שעדיין לא יצרנו אובייקט ממנו. אם לא יצרנו אובייקט, בואו נבצע יצירה של אובייקט Settings Fragment, והדבר הבא שאנחנו רוצים לעשות זה להציג, במקום לקרוא לגט Support Fragment Manager, אנחנו צריכים לקרוא לגט פרגמנט מנג'ר.

  21. 07:48

    למה? כי ראינו שכל הקונספט הזה של הפרפרנס פרגמנט בעצם לא שייך לתקיעת הספורט, אלא שייך לפרגמנט הישן יותר. ולכן אנחנו משתמשים בגט פרגמנט מנג'ר. בואו נתחיל טרנזקציה, נבצע ריפלייס, למה ריפלייס ולא אד?

  22. 08:10

    מפני שהיוזר יכול ללחוץ מספר פעמים על התפריט הזה של ה-settings, וכל פעם אנחנו בעצם רוצים להחליף את הקונטיינר הקודמת, את הפריגמנט הקודמת שהצגנו.

  23. 08:22

    וכמובן ראינו בעבר ש-replace בפעם הראשונה מתנהגת בדיוק כמו add, ככה שזה בדיוק מתאים לנו. עכשיו אנחנו רוצים את הקוד של הקונטיינר, לכן בשלב הזה בואו נחזור ל-layout, וב-Layout נחליף את ה-LinearLayoutRoot הזה שיש לנו פה ב-FrameLayout, ואנחנו רוצים להגדיר לו ID, וזה יהיה FrameLayoutContainer,

  24. 08:56

    ובעצם ה-FrameLayout שאחראי על ההצגה של הפרגמנט. עכשיו, אנחנו יכולים להציג כאן פרגמנט אחרת, שהיא לא קשורה לסטינגס פרגמנט שלנו, ובאיזשהו שלב כשלוחצים על התפריט settings להחליף ולהציג את הפריגבנט שלנו.

  25. 09:16

    עכשיו יכול להיות מצב שיש לנו פה גם כל מיני רכיבים אחרים, לדוגמה TextView, זה ממש בסדר. בואו נגדיר match parent בכדי שהוא יתפוס את הכל ונגדיר לו איזשהו TextSize של 30 ונגדיר לו Text של MainActivity נכדי שנדע שאנחנו במיין אקטיביטי, וגם נשים את זה באמצע על ידי Gravity Center.

  26. 09:47

    אז הנה יש לנו עכשיו את המיין אקטיביטי, ומוצג פה איזה שהוא layout שיש לו כל מיני רכיבים,

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: List Fragment

ההרצאה הבאה: Dialog Fragment

הרצאות קשורות מקורסים אחרים

  • שימוש ב-Fragment ב-React

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון