
EditText. רואים שתי דרכים, מימוש הממשק ב-activity ומחלקה אנונימית, ומטפלים גם באירועים שאי אפשר להירשם אליהם ב-XML.setOnClickListener עם this: באמצעות מציאת הרכיבים ב-onCreate קוראים ללחצן setOnClickListener(this). ה-activity עדיין לא מממש את הממשק, ולכן Alt+Enter ו-Make MainActivity implement OnClickListener מוסיפים implements ופונקציה onClick. הממשק View.OnClickListener נמצא בתוך המחלקה View, וכולל פונקציה אחת. בפונקציה משנים את צבע הרקע של ה-layout הראשי לירוק.setOnLongClickListener עם מחלקה אנונימית: כותבים new View.OnLongClickListener() ו-Android Studio בונה את המחלקה. בפונקציה onLongClick משנים את רקע הלחצן לכחול-ירקרק (Cyan).onLongClick מחזירה בוליאני. false אומר שלא מבטלים את שרשרת האירועים, ולכן אחרי הלחיצה הארוכה גם onClick מתבצע. true מבטל, ורק האירוע הארוך מתבצע.EditText נרשמים עם setOnKeyListener. בכל מקש שנלחץ מעתיקים את הטקסט ל-TextView שמתחתיו.View ששלח את האירוע ו-keyCode. אפשר להשוות אותו לקבועים של KeyEvent, למשל KEYCODE_A, ולהציג בהתאם Toast.this בתוך מחלקה אנונימית: כדי להציג Toast צריך את ה-activity, ולכן כותבים MainActivity.this. this לבדו מתייחס לאובייקט של המחלקה האנונימית. זה תחביר רגיל של Java. האירוע התבצע פעמיים, כנראה בגלל key down ו-key up.onClick.onLongClick או onKey.הטקסט המלא של הדקות הראשונות בהרצאה «Dynamic Registration» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם ראינו איך ניתן לבנות את כל הקונספט של הליסנר דיזיין פאטרן. אנחנו ראינו את זה על מחלקה חיצונית שאנחנו בנינו, היא דיווחה אירוע, אנחנו תפסנו את האירוע וכתבנו קוד שמופעל כאשר האירוע הזה מתבצע.
כעת אנחנו הולכים לראות בדיוק את זה אבל על רכיבים קיימים באנדרואיד. זאת אומרת אנחנו הולכים להשתמש בליסנר דיזיין פאטרן כאשר אנחנו הולכים להירשם לאירועים של רכיבים רגילים לגמרי שעבדנו איתם הרבה.
לדוגמה הנה יש לנו פה לחצן, הנה יש לנו פה אדי טקסט ויש לנו פה גם טקסט view. אנחנו הולכים לקחת ולבצע מספר אירועים כאשר אנחנו הולכים להירשם עליהם בצורה דינמית כמו שראינו בליסנר דיזיין פאטרם.
לדבר ראשון יש לנו פה את הלחצן הזה ואנחנו רוצים שהוא פשוט ישנה את צבע הרקע של האקטיביטי. אבל אנחנו לא רוצים להירשם דרך אירוע ה-On-Click בצורה כזאת בקובץ ה-XML, כי אנחנו רוצים לראות איך זה ניתן לביצוע על ידי Java Code.
אז בואו ניגש ל-Main Activity ונראה שיש לנו כאן למעלה את הרכיבים הדרושים, יש לנו פה את ה-Linear Layout, כאן אנחנו יכולים לראות את ה-ID, יש לנו כאן את הלחצן, את ה-Edit Text ואת ה-Text View, ופה אנחנו פשוט איתרנו את הרכיבים האלה.
כעת כל מה שאנחנו רוצים לעשות זה לפנות ללחצן שלנו שנקרא ButtonChangeColor ולחפש אירוע שמתחיל בסט ואנחנו רוצים לחפש את האירוע שנקרא SetOnLeakListener והנה אנחנו רואים אותו כאן ואנחנו נשתמש כעת בשיטה של ה-Current Class Listener זה אומר דיס אנחנו באים ואומרים
ללחצן שהדיס כלומר האובייקט הנוכחי שלנו הוא זה שמכיל את הפונקציה הדרושה, זאת אומרת הוא זה שיורש או מממש ליתר דיוק את האינטרפייס און קליק ליסנר.
אנחנו רואים שיש פה איזשהו אינטרפייס בילד אין קיים, אבל זה לא נכון, המחלקה שלנו, המיין אקטיביטי, לא מממשת את האינטרפייס און קליק ליסנר, אז אנחנו רואים שקיבלנו בדיוק את אותה שגיאה שראינו אז ואנחנו צריכים ללחוץ על אל אנטר ולבחור במייק מיין activity implement onclick listener בואו
נלחץ enter ואז הוא אומר לנו יש שם באינטרפייס הזה פונקציה אחת ויחידה שנקראת onclick בואו נבטל רק את הדירקטיב הזאת של השטרודל אוברייד שלא צריך את זה נבצע אוקיי ומה שאנדרואיד סטודיו עושה ושני דברים דבר ראשון אנחנו רואים פה למעלה שיש לנו פה אימפלמנטס את און קליק ליסנר ושימו לב
שאון קליק ליסנר נמצא בתוך המחלקה view בואו רגע נלחץ קונטרול נרחף מעל און קליק ליסנר נלחץ על הלחצן בעכבר ונגיע לאינטרפייס און קליק ליסנר שנמצא בתוך הקלאס view שזאת מחלקת הבסיס של כל הרכיבים הוויזואליים ואנחנו
אנחנו באמת רואים שיש לו פה איזושהי פונקציה אחת שנקראת onClick, זאת אומרת אנחנו רואים שזה בדיוק עובד לפי הדיזיין פאטרן של הליסנר דיזיין פאטרן שלמדנו, אינטרפייס מתחיל ב-on או גדולה, קליק זה מה הוא עושה, מסתיים במילה ליסנר, יש לו פונקציה שמתחילה ב-on או קטנה ואומרת מתי בעצם היא מתרחשת כשלוחצים קליק, הכל מתאים בדיוק לפאטרן שלמדנו,
ומה שעכשיו הדבר השני שקרה זה שאנדרואי סטודיו בונה לנו את המחלקה onclick בתוך המיין אקטיביטי אז המיין אקטיביטי מממשת את האינטרפייס view.onclick listener יש בו את הפונקציה onclick אנחנו כותבים בה איזה קוד שאנחנו רוצים והרישום במקום שזה יהיה בxml זה מתבצע בג'אווה קוד נתנו את האובייקט הנוכחי הכל עובד
כמו שצריך וכל מה שאנחנו רוצים לעשות זה לשנות את הצבע אז בואו נלך ל-Linear Layout Main Set Background Color בואו ניתן Color Green ובואו נריץ נראה שהכל עובד בואו נלחץ על הלחצן והנה אנחנו רואים שהכל התבצע כמו שצריך האירוע התבצע אנחנו לא רשמנו אותו ב-XML אלא ב-JavaCode האירוע נורה מתוך הלחצן נתפס בפונקציה הזאת
וכתבנו קוד עבורו עכשיו בואו בואו נראה דוגמא לרישום בצורה של מחלקה אנונימית. בואו ניקח עוד פעם את הלחצן ונחפש אירוע אחר set on long click listener.
כעת אם אנחנו באים ואומרים טוב אנחנו רוצים להירשם לאירוע הזה שוב פעם המערכת אומרת לנו אין בשום בעיה תביאו לנו אובייק שמממש את האינטרפייס on long click listener וברגע שהאירוע הזה יתבצע עבור הלחצן כלומר נמצא בו לחיצה ארוכה היוזר לוחץ ולא עוזב אז אני אקרא לפונקציה שהבאתם לי שנמצאת באובייקט שהבאתם לי ואנחנו רוצים שהרישום כעת יהיה בשיטה השנייה שלמדנו והשיטה הזאת והקונספט
של מחלקה אנונימית איך אנחנו עושים את זה פשוט אומרים לו new ואנחנו רוצים ליצור אובייקט מטיפוס האינטרפייס שימו לב אי אפשר ליצור אובייקט מטיפוס אינטרפייס אבל בכל זאת אני כותב לו on long click listener אני רואה שאנדרואיד סטודיו אומרת לי בסדר מצאתי שזה אינטרפייס בוא תלחץ
enter ואני אבנה לך מחלקה אנונימית שיורשת את האינטרפייס view.on long click listener אתה לא רואה את השם שלה לא נוצר פה אובייקט מטיפוס האינטרפייס הזה אלא נוצר אובייקט מטיפוס המחלקה האנונימית שאנחנו לא יודעים מה השם שלה והוא לא מעניין אותנו ומה שאנחנו רואים פה זה את הקוד האמיתי של המחלקה הזאת ובתוך המחלקה הזאת יושבת
פונקציה שנקראת onLongClick הפעם בואו ניפטר מהדרקטיב ובואו נכתוב את הקוד של הפונקציה הזאת ומה שהפונקציה הזאת שהיא הולכת לעשות זה לשנות את הצבע רקע של הלחצן ולא של האקטיביטי מפני שקליק רגיל משנה את הצבע של האקטיביטי אז אני רוצה לראות ששניהם עובדים אז בואו ניגש ללחצן set background
color הפעם ניתן לו color בואו ניקח את הצבע cyan והשאלה זה מה זה return false אנחנו רואים משהו מוזר ה-on long click מחזיר return בולעני והרעיון שעומד כאן הוא כזה יש כאן משהו שנקרא event bubbling זאת אומרת אירוע מתבצע ואז אירוע נוסף מתבצע מעליו כי יש פה גם on click וגם on long click איזה מהם מתבצע ראשון
אז למעשה long click מתבצע ראשון ורק אחר כך ה-on click מתבצע רק בעזיבה הקליק כאשר כבר אז ה-Long Click יכל להתבצע או שלא, כי יכול להיות שהלחיצה הייתה קצרה מדי.
אז הערך הבוליאני אומר האם אנחנו רוצים לבטל את הביעבוע או לא לבטל את הביעבוע של האירוע. מה זה אומר? אם אנחנו מחזירים False זה אומר שאנחנו לא מבטלים את הביעבוע של האירועים.
זה אומר שאם האירוע ה-Long Click מתבצע אז גם הפונקציה הזאת מתבצעת ואם החזרנו False זה אומר שאנחנו לא מבטלים את הביעבוע ולכן גם ה-on-click יתבצע. בואו קודם כל נראה את זה, נריץ, הנה אנחנו רואים את הלחצן והלחיצה הראשונה שאני רוצה לעשות היא לחיצה ארוכה.
אז אני מתחיל ללחוץ לחיצה ארוכה, אנחנו רואים שהוא השתנה, אני עוזב עכשיו ואנחנו רואים את ה-background color של המיין אקטיביטי התבצעה.
זאת אומרת ששניהם התבצעו, גם ה-long-click וגם ה-click הרגיל שהתבצע אחריו. בואו נחזיר, תראו. נריץ הנה אנחנו רואים את הלחצן שוב פעם אני לוחץ לחיצה ארוכה הוא נצבע אני עוזב עכשיו אבל ביטלנו את הביאבוע ולכן רק האירוע של הלונג ליג מתבצע ו-return true אומר cancel bubbling תבטל את הביאבוע return
false מציין לנו don't cancel bubbling בואו רק נשים את זה בהערה כי אנחנו לא מחזירים פעמיים ערך והנה יש לנו רישום לאירוע שבכלל לא יכלנו לרשום אותו דרך האקסמל, לפחות לא בגרסאות האלה של אנדרואיד ואנחנו היינו חייבים לרשום אותו בצורה דינמית כאשר המימוש של הליסנר
שבחרנו כרגע הוא מחלקה אנונימית. בואו נראה איך אנחנו יכולים גם את האדיט טקסט לבצע רישום עבורו.
אז בואו נניח שכל פעם שהיוזר כותב אנחנו רוצים לתפוס את האירוע תוך כדי הכתיבה ולכתוב בדיוק את מה שכתוב באדיטקסט לכתוב גם בטקסט ויו כאן מתחתיו. זה אומר שאנחנו בכלל צריכים לתפוס אירוע אחר מקליק ומלונג קליק והאירוע שאנחנו רוצים לתפוס זה אירוע שינוי מקש.
בואו ניגש לכאן ושימו לב שאנחנו עדיין נמצאים ב-on create. כל הדבר הזה מתבצע כאשר האקטיביטים בעצם נוצרת, ואז אנחנו רושמים כל האירועים הדרושים.
אז יש לנו פה Edit, Text, Data, Set, כל מתחיל פחות או יותר או ב-Set או ב-Add, אנחנו כרגע ב-Set, ואנחנו רוצים On, והנה יש לנו פה Key Listener, בואו ניקח את האירוע On, Key Listener, לא תאזיני על מקש שהיוזר לוחץ.
בואו נבחר גם כאן את השיטה של המחלקה האנונימית. אז אנחנו רושמים new on key listener הנה אנחנו רואים שאנדרואי סטודיו גילתה בדיוק את האינטרפייס אנחנו לוחצים על enter ואנדרואי סטודיו בונה לנו את כל המחלקה האנונימית בואו ניפטר מהדירקטיב ופשוט
נכתוב את הקוד הדרוש ומה שאנחנו רוצים לעשות זה לגשת לטקסט view data אנחנו רוצים to set ואנחנו רוצים לגשת לאדיט טקסט דאטה נקודה גט