PracticU

Finding Views by ID

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Finding Views by ID
מילון מושגים:
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.

Finding Views by ID
כדי לכתוב קוד Java שמגיב לאירועי משתמש, למשל להציג שעה או תאריך ב-TextView אחרי לחיצה על כפתור, צריך קודם לאתר בקוד את הרכיבים שעל המסך. ההרצאה מראה איך נותנים לרכיב מזהה ואיך מוצאים אותו בקוד.
העיקרון
כל רכיב ויזואלי הוא אובייקט ממחלקה כמו Button, RadioButton, CheckBox או TextView. כולן יורשות את מחלקת הבסיס View. כדי לגשת לרכיב בקוד חייב להיות לו ID ייחודי באותו מסך. ל-ID לא חייבים לתת לרכיב שלא נוגעים בו בקוד.
השלבים העיקריים
1. מתן ID: בוחרים את הרכיב ומחפשים בתכונות את id. המערכת נותנת שם כמו textView, ובדוגמה הוא שונה ל-textViewCurrentTime, ולרכיב השני ל-textViewCurrentDate. המרצה כותב כתחילית את סוג הרכיב ואחריה את ייעודו.
2. כללי השם: אותיות אנגליות בלבד, בלי רווחים ובלי תווים מיוחדים. מותר underline וספרות, אבל לא ספרה בתחילת השם.
3. ב-XML: הערך נראה כ-@+id/textViewCurrentTime. הסימן @ מציין resource, ו-+ אומר להוסיף אם לא קיים.
4. הגדרת שדות במחלקה: במחלקה MainActivity מוסיפים שדות private מסוג TextView, אחד לכל רכיב שרוצים לגשת אליו. כדי שה-import ייווסף אוטומטית, מקלידים את השם ובחלון ההצעות לוחצים Enter (לא Tab או רווח). Ctrl+D משכפל שורה. אפשר גם Alt+Enter להוספת import.
5. שימוש ב-onCreate: זו פונקציה שרצה אוטומטית כשהמסך נטען, ובה מאתרים את הרכיבים.
6. הפונקציה findViewById: מקבלת int שהוא ה-ID ומחזירה View. את המספר מקבלים מהמחלקה R שאנדרואיד יוצרת, בצורה R.id.textViewCurrentTime. Ctrl+P בתוך הסוגריים מראה את הפרמטרים.
7. Casting: כי הפונקציה מחזירה View, מוסיפים casting ל-TextView. אפשר גם ללחוץ Alt+Enter ולבחור Cast to TextView.
מוסכמות
- שם השדה זהה לשם ה-ID, ומתחיל בסוג הרכיב.
- משתנים ב-Java מתחילים באות קטנה ובמילים מחוברות עם אות גדולה לכל מילה נוספת, ומחלקות באות גדולה.
שימו לב
- רכיבים שגררתם מקבלים ID אוטומטי כמו button2. אם לא משתמשים בהם בקוד אפשר למחוק את ה-ID.
- אם רכיב אחר ב-XML מתייחס ל-ID, מחיקתו תגרום לשגיאה. בדוגמה ה-TextView השני ממוקם יחסית לכפתור.
- שינוי ID דרך חלון Properties מציע לעדכן גם את כל ההתייחסויות. בדוגמה שונה ל-buttonCurrentDate, ו-Android Studio עדכנה את ההתייחסות.
אחרי ההרצאה אפשר לתת ID לרכיבים, להגדיר להם שדות ולאתר אותם בקוד, והשימוש בהם ייראה בהרצאה הבאה.
השיעור הבא בקורס: Writing onClick Events

פרקי ההרצאה: Finding Views by ID

  1. 00:00

    קוד Java כתגובה לאירועים

  2. 01:02

    רכיבים ויזואליים כאובייקטים

  3. 02:24

    מחלקת הבסיס View

  4. 03:04

    הצורך ב-ID לכל רכיב

  5. 04:42

    מתן ID משמעותי לרכיב

  6. 07:27

    חוקי שמות ה-ID

  7. 08:49

    הגדרת Data Members במחלקה

  8. 12:00

    הפונקציות onCreate ו-findViewById

תמלול ההרצאה: Finding Views by ID

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

  1. 00:03

    אחרי שבנינו את העיצוב של האפליקציה שלנו אנחנו מעוניינים לגשת עכשיו ולכתוב את הקוד בג'אווה שרץ מאחורי הקלעים ופועל כתגובה לאירועי המשתמש לדוגמה כאשר המשתמש לוחץ על הלחצן show current time אנחנו רוצים מאחורי הקלעים לכתוב את השעה הנוכחית לרכיב

  2. 00:25

    טקסט view הזה כאשר היוזר לוחץ על show current date אנחנו מעוניינים לגשת ובקוד ג'אווה שרץ מאחורי הקלעים לכתוב את התאריך הנוכחי לרכיב טקסט ויו השני.

  3. 00:41

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

  4. 00:56

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

  5. 01:11

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

  6. 01:34

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

  7. 02:18

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

  8. 02:51

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

  9. 03:19

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

  10. 03:43

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

  11. 04:00

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

  12. 04:14

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

  13. 04:37

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

  14. 05:04

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

  15. 05:33

    זה יהיה טקסט-ויו קורנט-טיים. נלחץ על האמפר ונראה שיש לנו עכשיו טקסט-ויו קורנט-טיים בתור ה-ID של הרכיב. אם אנחנו הולכים עכשיו לקוד ה-XML בואו ניגש בצורה כזאת, to declaration אנחנו יכולים לראות שמה שעשינו שינה את ה-id עצמו ל-textview-currentime עכשיו לפני זה אנחנו רואים שיש פה איזה ביטוי מוזר

  16. 06:09

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

  17. 06:32

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

  18. 06:48

    פלוס אומר אם עדיין ה-ID הזה לא הוגדר נא להוסיף אותו. ID מציין שאנחנו בעצם נותנים לא סתם ריסורס שהוא תמונה או מחרוזת או גופן אלא ריסורס שהוא ID ואז פלאש מפריד לנו ומגיע ל-ID עצמו.

  19. 07:11

    בואו ניגש ונבצע את אותו הדבר עבור הטקסט ויו השני. נתפוס את הטקסט ויו, נאתר את ה-ID שלו ובמקום השם הדיפולטי טקסט ויו 2, בואו נמחק את המילה 2, ונרשום Current Date.

  20. 07:31

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

  21. 07:51

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

  22. 08:19

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

  23. 08:38

    אז בואו נעשה את זה. כאן אנחנו צריכים לגשת למחלקה ב-Java. מה שאנחנו צריכים לעשות עכשיו זה פשוט לבנות Data Members משלנו בתוך המחלקה שמתארת את ה-Activity.

  24. 08:57

    Activity כמו שאמרנו זה מסך, ה-Main Activity זה המסך הראשי, ויש לנו מחלקה שנקראת Main Activity שמתארת את המסך הראשי. בתוך המחלקה הזאת, כעת, אנחנו צריכים להגדיר Data Members, כלומר משתנים ברמת מחלקה.

  25. 09:13

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

  26. 09:35

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

  27. 09:53

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

  28. 10:28

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

  29. 10:59

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

  30. 11:20

    מה השם שלו? השם שלו כמוסכמה טובה צריך להיות השם של ה-id. אז זה יהיה text view current time נשכפל את השורה הזאת על ידי ctrl d מקש ממש מגניב שמאפשר לשכפל אוטומטית שורה ונגדיר עוד אחד current date.

  31. 11:46

    למה הגדרתי שני data members כי יש לי בדיוק את הרכיבים האלה שאני רוצה לאתר אותם ולאחר מכן להתייחס אליהם בקוד. כעת יש לנו כאן אירוע פונקציה מיוחדת שנקראת onCreate.

  32. 12:06

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

  33. 12:25

    מה הפעולות שאנחנו רוצים לעשות? אנחנו רוצים לאתר את האובייקטים הללו ולהכניס אותם ל-references האלה. איך עושים את זה?

  34. 12:40

    אז קיימת פונקציה שנקראת find view, אני מזכיר לכם view זאת מחלקת הבסיס של כל הרכיבים הוויזואליים ולכן כל רכיב ויזואלי גם הוא נחשב view אז הפונקציה נקראת find view by ID אוקיי, מה זה ה-ID?

  35. 13:02

    אני צריך לתת את ה-ID לפונקציה הזאת והיא אמורה להחזיר לי את האובייקט האמיתי הזה זה שבאמת מוצג על המסך ואני רוצה להתייחס אליו אבל מה בדיוק אני אמור לתת לפונקציה?

  36. 13:22

    האם אני אמור לתת לה את השם טקסט ויו קורנט טיים לדוגמה? לא הגיוני שאני אתן לה טקסט ויו קורנט טיים

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

ההרצאה הקודמת: תוכנית ראשונה באנדרואיד

ההרצאה הבאה: Writing onClick Events

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

  • יצירה ושימוש ב-SQL Views

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

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