
Button, RadioButton, CheckBox או TextView. כולן יורשות את מחלקת הבסיס View. כדי לגשת לרכיב בקוד חייב להיות לו ID ייחודי באותו מסך. ל-ID לא חייבים לתת לרכיב שלא נוגעים בו בקוד.id. המערכת נותנת שם כמו textView, ובדוגמה הוא שונה ל-textViewCurrentTime, ולרכיב השני ל-textViewCurrentDate. המרצה כותב כתחילית את סוג הרכיב ואחריה את ייעודו.@+id/textViewCurrentTime. הסימן @ מציין resource, ו-+ אומר להוסיף אם לא קיים.MainActivity מוסיפים שדות private מסוג TextView, אחד לכל רכיב שרוצים לגשת אליו. כדי שה-import ייווסף אוטומטית, מקלידים את השם ובחלון ההצעות לוחצים Enter (לא Tab או רווח). Ctrl+D משכפל שורה. אפשר גם Alt+Enter להוספת import.findViewById: מקבלת int שהוא ה-ID ומחזירה View. את המספר מקבלים מהמחלקה R שאנדרואיד יוצרת, בצורה R.id.textViewCurrentTime. Ctrl+P בתוך הסוגריים מראה את הפרמטרים.View, מוסיפים casting ל-TextView. אפשר גם ללחוץ Alt+Enter ולבחור Cast to TextView.button2. אם לא משתמשים בהם בקוד אפשר למחוק את ה-ID.buttonCurrentDate, ו-Android Studio עדכנה את ההתייחסות.הטקסט המלא של הדקות הראשונות בהרצאה «Finding Views by ID» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שבנינו את העיצוב של האפליקציה שלנו אנחנו מעוניינים לגשת עכשיו ולכתוב את הקוד בג'אווה שרץ מאחורי הקלעים ופועל כתגובה לאירועי המשתמש לדוגמה כאשר המשתמש לוחץ על הלחצן show current time אנחנו רוצים מאחורי הקלעים לכתוב את השעה הנוכחית לרכיב
טקסט view הזה כאשר היוזר לוחץ על show current date אנחנו מעוניינים לגשת ובקוד ג'אווה שרץ מאחורי הקלעים לכתוב את התאריך הנוכחי לרכיב טקסט ויו השני.
לפני שנעשה את זה אנחנו צריכים להבין איזשהו עיקרון מאוד חשוב ומאוד בסיסי שקיים כאן ושאנחנו בעצם הולכים להשתמש איתו בכל אפליקציה ובכל קוד בהיינד שאנחנו הולכים לכתוב.
והעיקרון זה העיקרון הבא מה בעצם אנחנו רואים פה על המסך? אז כמובן שאתם יכולים להגיד אנחנו רואים כל מיני רכיבים ויזואליים אבל מה זה רכיב ויזואלי?
אז רכיב ויזואלי שאנחנו רואים הוא קודם כל אובייקט והאובייקט הזה נוצר ממחלקה מסוימת. מה שאנחנו רואים כאן שמסומן אנחנו רואים את זה בתור איזה שהוא לחצן אבל למעשה זה אובייקט ממחלקה button.
אנחנו יכולים לראות את השם של המחלקה כאן ברכיבים הוויזואליים שגררנו. אתם רואים כאן בטן שמוצג לנו למעלה אם אני מרחף מעל סמול בטן אני רואה שכתוב לי סמול בטן אבל עדיין זה רכיב מסוג בטן כאן יש לי לדוגמה רדיו בטן שזה תיבת הרדיו למטה יש לי צ'ק בוקס מתחתיה יש לי סוויץ' כל הדברים האלה זה קודם כל מחלקות שקיימות הרכיבים האלה שאנחנו רואים כאן זה אובייקטים מהסוג של המחלקות האלה כל המחלקות האלה דרך
אגב נתון מאוד חשוב יורשות מחלקה אחת בסיסית שהיא מחלקת הבסיס של כל הרכיבים הוויזואליים באנדרואיד והיא נקראת view זאת מחלקת הבסיס של כל הרכיבים הוויזואליים שאנחנו רואים אותם אז בעצם כל רכיב ויזואלי שאנחנו בעצם רואים זה איזשהו אובייקט ממחלקה ספציפית שכמובן יורשת איזושהי מחלקת בסיס שנקראת view.
אם אנחנו רוצים בקוד הג'אווה לגשת ולבצע פעולה מסוימת עם האובייקט הזה אנחנו חייבים קודם כל שלאובייקט הזה יהיה ID. ID זה מזהה ייחודי של הרכיב ואז דרך ה-ID שלו אנחנו הולכים לאתר אותו בקוד Java ולכתוב קוד עבורו.
לדוגמה, להכניס אליו ערך, לשנות ערך, לקרוא ממנו ערך. בקיצור, כל רכיב שאנחנו מעוניינים לגשת אליו בקוד Java, אנחנו חייבים קודם כל לתת לו ID, וכמובן ה-ID הזה הוא ייחודי ולא יכול לחזור על עצמו באותו המסך, באותה אקטיביטי.
למי אנחנו רוצים לכתוב קוד ג'אווה או למי אנחנו רוצים להתייחס בדוגמה הזאת? רק לטקסט views האלה. אנחנו לא רוצים בקוד ג'אווה לשנות את הלחצנים.
הלחצנים כמובן יפעילו את הקוד אבל אני לא רוצה לגעת בלחצן הזה להכניס אליו ערך אחר או לקרוא ממנו ערך אחר. אם הייתי רוצה לעשות את זה אז הייתי צריך גם ללחצן לתת ID.
אם יש רכיב שהוא רק רכיב ויזואלי ואני לא רוצה לגעת בו בקוד ג'אווה, אני יכול לתת לו איי-די אבל אני לא חייב, זה לא חובה. אז מה שאנחנו הולכים לעשות זה קודם כל לבחור את הרכיב הזה, את הטקסט-ויו הראשון, לגשת, לחפש בתכונות שלו את התכונה איי-די ולתת לתכונה
הזאת איזשהו שם משמעותי. אז בואו נאתר את האיי-די ואנחנו רואים אותו כאן, ובגלל שאנחנו גררנו את הרכיב, אוטומטית הדיזיינר נותן לו איזשהו ID דיפולטי אנחנו רואים שהוא נתן לו את ה-ID טקסט-ויו ואנחנו כמובן רוצים לתת לו ID קצת יותר משמעותי כי טקסט-ויו אומר לנו רק שהוא טקסט-ויו הוא
לא אומר לנו מה הייעוד שלו תחשבו גם שיכול להיות לכם הרבה טקסט-ויו שפזורים לכם על המסך אז אנחנו צריכים לדעת מה המשמעות של אותו טקסט-ויו שאנחנו רוצים להתייחס אליו מה שתמיד אני עושה זה נותן את התחילית כשם של הרכיב, לדוגמה אם הרכיב עצמו הוא טקסט-ויו אז אני כותב טקסט-ויו, ומיד אחר כך את הייעוד שלו או מה שהוא מייצג.
זה יהיה טקסט-ויו קורנט-טיים. נלחץ על האמפר ונראה שיש לנו עכשיו טקסט-ויו קורנט-טיים בתור ה-ID של הרכיב. אם אנחנו הולכים עכשיו לקוד ה-XML בואו ניגש בצורה כזאת, to declaration אנחנו יכולים לראות שמה שעשינו שינה את ה-id עצמו ל-textview-currentime עכשיו לפני זה אנחנו רואים שיש פה איזה ביטוי מוזר
כזה שטרודל פלוס id סלאש מה זה כל הדברים האלה שטרודל מציין resource הסימן שטרודל מציין שמה שאנחנו נותנים כרגע הולך להיכנס או קיים בריסורסז של האפליקציה.
הריסורסז של האפליקציה זה כל מה שקיים תחת תיקיית רס. איפשהו בתוך תיקיית רס קיים לנו רשימה של כל ה-ID שאנחנו נותנים. אנחנו ממש עוד מעט הולכים להתעסק עם הרשימה הזאת.
פלוס אומר אם עדיין ה-ID הזה לא הוגדר נא להוסיף אותו. ID מציין שאנחנו בעצם נותנים לא סתם ריסורס שהוא תמונה או מחרוזת או גופן אלא ריסורס שהוא ID ואז פלאש מפריד לנו ומגיע ל-ID עצמו.
בואו ניגש ונבצע את אותו הדבר עבור הטקסט ויו השני. נתפוס את הטקסט ויו, נאתר את ה-ID שלו ובמקום השם הדיפולטי טקסט ויו 2, בואו נמחק את המילה 2, ונרשום Current Date.
שימו לב שזה ממש שם של משתנה ויש המון חוקים לגבי השם הזה, סדרה של חוקים לגבי השם הזה. דבר ראשון, חובה אך ורק אותיות באנגלית, לא אותיות בעברית, לא רווחים, לא תווים מיוחדים.
מותר גם ספרות, אבל אסור שהוא יתחיל בספרה, ממש כמו שם של משתנה סטנדרטי. אז יכול להיות פה underline, יכול להיות כאן אותיות קטנות באנגלית אותיות גדולות באנגלית וספרות רק אסור לא להתחיל בספרה אז אחרי שהגדרנו ids לטקסט view הראשון ולטקסט view השני בעצם יש לנו עכשיו איזשהו מזהה ייחודי עבור אותם רכיבים שאנחנו רוצים
להתייחס אליהם בקוד וכעת אנחנו יכולים ללכת לקוד ולאתר את הרכיבים האלה אז כפי שציינתי הרכיבים האלה אלו אובייקטים אמיתיים שקיימים איפשהו באפליקציה ואנחנו צריכים עכשיו ללכת לקוד ולאתר אותם.
אז בואו נעשה את זה. כאן אנחנו צריכים לגשת למחלקה ב-Java. מה שאנחנו צריכים לעשות עכשיו זה פשוט לבנות Data Members משלנו בתוך המחלקה שמתארת את ה-Activity.
Activity כמו שאמרנו זה מסך, ה-Main Activity זה המסך הראשי, ויש לנו מחלקה שנקראת Main Activity שמתארת את המסך הראשי. בתוך המחלקה הזאת, כעת, אנחנו צריכים להגדיר Data Members, כלומר משתנים ברמת מחלקה.
הרשאת הגישה שמקובלת כאן היא Private. איזה משתנים? אותם משתנים בדיוק של הרכיבים שאנחנו רוצים לגשת אליהם. שימו לב, אם יש לי רכיב על המסך שאני לא רוצה להתייחס אליו בקוד, אני לא אגדיר אותו פה כData Member, אני אגדיר כData Member, רק רכיבים שאני רוצה
באמת לגשת ולהתעסק איתם. אז יש לנו כאן את הטקסט view הראשון שאנחנו רוצים להגדיר, ושימו לב שאם אני פשוט רושם טקסט view ועושה רווח, אז אני מקבל אדום על הדבר הזה.
למה? מפני שחסר לי פה אימפורט של הפאקג' המתאים לגבי טקסט view. עכשיו, אם קיבלתם אדום כזה עם קו מתחתיו, אין שום בעיה ללחוץ על Alt Enter, הכוונה לחצן ה-Alt שנמצא מימין לרווח, לא לחצן ה-Alt שנמצא משמאל לרווח, Alt Enter, וברגע שעשיתם את הדבר הזה, אוטומטית אני רואה שאנדרואיד סטודיו השלימה
לנו פה את ההגדרה המתאימה של האימפורט, אבל יש שיטה קצת יותר פשוטה מזה. בואו ניפטר רגע מהאימפורט, ניגש, ונתחיל לכתוב מההתחלה טקסט VU. איך שאנחנו רואים את המילה טקסט VU בחלון ההצעות באינטליסנס, אינטליסנס זה חלון ההצעות שאנדרואיד סטודיו מציע לנו, אנחנו כבר עכשיו יכולים ללחוץ על אנטר ואך
ורק אנטר, לא על טאב, לא על רווח, לא על שום דבר אחר, אנטר, וזה גם משלים את השם של המחלקה שאנחנו כרגע כותבים וגם מגדיר את האימפורט הדרוש עכשיו מה שאנחנו עושים פה זה יוצרים משתנה שהוא data member כלומר משתנה ברמת המחלקה.
מה השם שלו? השם שלו כמוסכמה טובה צריך להיות השם של ה-id. אז זה יהיה text view current time נשכפל את השורה הזאת על ידי ctrl d מקש ממש מגניב שמאפשר לשכפל אוטומטית שורה ונגדיר עוד אחד current date.
למה הגדרתי שני data members כי יש לי בדיוק את הרכיבים האלה שאני רוצה לאתר אותם ולאחר מכן להתייחס אליהם בקוד. כעת יש לנו כאן אירוע פונקציה מיוחדת שנקראת onCreate.
onCreate זאת פונקציה ששייכת למסך שרצה אוטומטית כאשר המסך עולה ומוצג למשתמש. בתוך הפונקציה הזאת אנחנו יכולים להגדיר פעולות אתחול שירוצו פעם אחת כאשר המסך נטען ומוצג.
מה הפעולות שאנחנו רוצים לעשות? אנחנו רוצים לאתר את האובייקטים הללו ולהכניס אותם ל-references האלה. איך עושים את זה?
אז קיימת פונקציה שנקראת find view, אני מזכיר לכם view זאת מחלקת הבסיס של כל הרכיבים הוויזואליים ולכן כל רכיב ויזואלי גם הוא נחשב view אז הפונקציה נקראת find view by ID אוקיי, מה זה ה-ID?
אני צריך לתת את ה-ID לפונקציה הזאת והיא אמורה להחזיר לי את האובייקט האמיתי הזה זה שבאמת מוצג על המסך ואני רוצה להתייחס אליו אבל מה בדיוק אני אמור לתת לפונקציה?
האם אני אמור לתת לה את השם טקסט ויו קורנט טיים לדוגמה? לא הגיוני שאני אתן לה טקסט ויו קורנט טיים