PracticU

Dialog Fragment

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

Dialog Fragment
DialogFragment היא פרגמנט שמוצגת כדיאלוג מותאם אישית. ההרצאה בונה דיאלוג שאלה עם כפתורי Yes ו-No שמדווח למיין אקטיביטי.
השלבים העיקריים
1. ה-layout: יוצרים QuestionDialogFragment. ה-layout הוא LinearLayout אנכי עם רקע, padding, ImageView של סימן שאלה (40dp), TextView לשאלה (מודגש, לבן, גודל 20, עם tools:text להצגה בדיזיינר בלבד), ו-LinearLayout אופקי ובו שני כפתורים, Yes ו-No.
2. קבלת הרכיבים: ב-onCreateView שומרים את ה-layout בשם linearLayoutRoot, משיגים דרכו את ה-TextView ושני הכפתורים עם findViewById, ובסוף מחזירים אותו.
3. טקסט השאלה: כדי שהדיאלוג תשרת שאלות שונות, הטקסט מגיע מהאקטיביטי דרך getArguments().getString(...) ומוצג עם setText.
4. ממשק Callbacks: מגדירים אינטרפייס עם הפונקציות yes ו-no. בלחיצה על כפתור קוראים ל-dismiss() וקוראים לפונקציה המתאימה דרך getActivity() עם casting. כדי ש-dismiss יעבוד, הפרגמנט צריכה לרשת DialogFragment (גרסת support).
5. חובת מענה: setCancelable(false) מונע סגירה בלחיצה מחוץ לדיאלוג, והמשתמש חייב לענות.
6. newInstance: פונקציה סטטית שיוצרת את הדיאלוג, מכניסה את questionText ל-Bundle עם putString, מגדירה אותו עם setArguments ומחזירה את הדיאלוג.
7. במיין אקטיביטי: לחצן "show dialog" עם onClick שיוצר את הדיאלוג עם newInstance (הטקסט "delete this product"), וקורא ל-show(getSupportFragmentManager(), null). האקטיביטי מממשת את QuestionDialogFragment.Callbacks ומציגה Toast על Yes או No.
בהרצה הדיאלוג מופיע, לחיצה בחוץ לא סוגרת אותו, והלחיצה על Yes או No מגיעה לאקטיביטי.
כעת אפשר לבנות דיאלוג שאלה גנרי ולהציגו דרך DialogFragment.
השיעור הבא בקורס: Orientation Based Fragment in XML

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

  1. 00:00

    DialogFragment במקום Dialog רגיל

  2. 00:41

    יצירת QuestionDialogFragment

  3. 01:50

    עיצוב Layout של הדיאלוג

  4. 04:33

    הוספת לחצני Yes ו-No

  5. 06:44

    איתור הרכיבים ב-onCreateView

  6. 08:08

    קבלת השאלה עם getArguments

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

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

  1. 00:00

    ראינו שבמקום ListActivity קיימת לנו ListFragment שמבצעת את אותו הדבר, ובמקום PreferenceActivity קיימת לנו PreferenceFragment שמבצעת את אותו הדבר. בעבר התעסקנו גם עם Dialogs, וראינו שקיימים כל מיני סוגי Dialogs.

  2. 00:24

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

  3. 00:39

    הדבר הראשון שאנחנו הולכים לעשות זה פשוט להוסיף פרגמנט חדשה. בואו ניגש, נבצע פרגמנט, ובואו נקרא לפרגמנט הזאת Question Dialogue Fragment. בואו נוסיף את הפרגמנט, נסדר טיפה את הקוד, ניפטר פה מהקונסטרקטור הרק, כי גם ככה יש לנו אחד כזה, בצורה כזאת, וניגש קודם כל לסדר את ה-layout.

  4. 01:17

    עכשיו, המטרה שלנו זה לבנות איזושהי פרגמנט שמתאר את Dialog Fragment של שאלה, Question Dialog, והמשתמש יכול לענות עליה בכן או לא, ממש כמו שעשינו בעבר, לדוגמה, עם alert dialog.

  5. 01:35

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

  6. 01:56

    מה שאנחנו רוצים לעשות זה להגדיר שאנחנו קודם כל wrap content, מבחינת הדיאלוג עצמה, ה-layout שלה. אנחנו רוצים איזשהו background, נבחר איזשהו צבע כזה.

  7. 02:18

    לאחר מכן אנחנו רוצים להגדיר orientation, בואו אבל, נגדיר שאנחנו linear בעצם, זה יהיה יותר גיוני. נגדיר orientation, vertical.

  8. 02:35

    לאחר מכן נגדיר איזשהו padding מסוים, בואו ניתן לו איזה 30, והנה יש לנו כאן, קודם כל, מתחיל להיות ה-layout של הדיאלוג. נגדיר לנו איזה image view, ניתן איזה 40 dp, גם ל-width וגם ל-height, יש לנו כאן src, בתוך drawable, יש לנו question.

  9. 03:09

    לאחר מכן, בואו נגדיר לעצמנו איזה TextView כזה, גם כן, WrapContent, WrapContent, ואנחנו רוצים קודם כל ID, TextViewQuestion, בכדי להכניס לו את הטקסט בצורה דינמית.

  10. 03:32

    אנחנו רוצים, בואו נניח TextStyle to Bold, שאירו את זה חזק, TextColor, בואו ניקח לבן, רואים את זה יותר טוב על האדום, בואו ניקח text size 20, ובואו ניקח tools.time.text, ואז נוכל להגדיר איזשהו טקסט שרואים אותו רק בדיזיינר ולא באמת בריצה, כי בריצה אנחנו רוצים טקסט אחר.

  11. 04:00

    אז בואו נגדיר פה question.text בצורה כזאת, ומה שאנחנו רוצים לעשות בנוסף זה לשים אותם אחד ליד השני ולא אחד מתחת השני. אז בואו ניקח linear layout נוסף, יש לנו כאן ב-linear layout match parent ו-rap content, נזרוק את שניהם בתוכו, בצורה כזאת, ובואו נגדיר להם gravity, אבל זה בעצם כאן הגיוני להגדיר את ה-gravity, בואו ניקח layout gravity,

  12. 04:41

    center vertical לדוגמה, ואז טיפה מסתדר יותר טוב באמצע, ומה שאנחנו רוצים לעשות זה שני לחצנים של כן ולא אז הנה יש לנו פה button, בואו נגדיר אותו כrap content יש לנו כאן בבטן id, אנחנו הולכים להשתמש איתו בקוד בואו נגדיר שהבטן הראשון זה yes, text yes גם כאן היינו יכולים להגדיר את הטקסט דינמית

  13. 05:11

    אבל בואו נניח שהדיאלוג הזאת, הטקסט שלה הוא לא דינמי ובואו נגדיר שיש לנו TextAllCapsFalse וגם TextSize20, ויש לנו פה עוד לחצן שאנחנו רוצים, והלחצן הבא הוא No, מגדיר לו TextNo, IDButtonNo, וגם את זה נשים עם LinearLayout, MatchParent, WrapContent,

  14. 05:46

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

  15. 06:20

    הוא Gravity Center, בכדי שהכל יהיה בול באמצע, ונראה לי שנסתפק בזה. אוקיי, אז הנה יש לנו עכשיו בעצם את הממשק משתמש של הדיאלוג.

  16. 06:37

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

  17. 06:57

    הדבר הראשון זה אנחנו רוצים את הLinearLayoutRoute הזה, LinearLayout, ואנחנו רוצים בשורה האחרונה להחזיר אותו. למה אנחנו רוצים את זה?

  18. 07:16

    כי אנחנו רוצים עכשיו להתחיל לקבל את כל הרכיבים של ה-UI, ולהכניס אליהם ערכים דינמית, או להירשם לאירועים שלהם דינמית. הרכיב הראשון שאנחנו רוצים זה ה-TextView.

  19. 07:31

    קראנו לו TextView Question, בואו נכניס אליו TextView, ניגש לLinearLayout, FindViewById, RID, TextViewQuestion. הדבר הבא שאנחנו רוצים זה Button, והButton הראשון זה Yes, כי אנחנו רוצים להירשם דינמית לאירועים שלהם, LinearLayoutRoot, FindRIDButtonYes, נשכפל, יש לנו פה ButtonNo,

  20. 08:08

    בצורה כזאת. אחרי שיש לנו את הרכיבים, אנחנו רוצים להביא מידע. בואו ניקח את ה-Question Text. ה-Question Text שלנו זה משהו שאנחנו רוצים לקבל דינמית, מפני שאנחנו רוצים שה-Question Dialog Fragment הזאת תשרת כל מיני דיאלוג שמציגות שאלה למשתמש.

  21. 08:34

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

  22. 09:02

    השאלה, אחרי שיש לנו את השאלה עצמה שאנחנו רוצים לשאול את המשתמש, אנחנו רוצים להגשת ל-Text View Question, to set Text, ואת ה-Question Text.

  23. 09:15

    הדבר הבא שאנחנו רוצים זה להירשם לאירועים של הלחצנים. בואו ניגש ל-Button Yes, ונירשם ל-Set On

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

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

ההרצאה הבאה: Orientation Based Fragment in XML

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

  • הוספת אנימציה ל-Dialog
  • שימוש ב-Fragment ב-React
  • תיבות דו-שיח - Build-In Dialog Boxes

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

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