
LinearLayout אופקי עם ארבעה ImageButton (בני, Duckling, Kitten, Puppy), כל אחד עם רוחב 0dp, גובה 80dp, weight 1 ו-scale type fitXY.onCreateView שומרים את ה-layout בתור layoutRoot, ודרכו קוראים ל-findViewById לכל אחת מארבע התמונות, ובסוף מחזירים את ה-layoutRoot.OnClickListener ונרשמת לכל ארבעת הכפתורים. ב-onClick מבצעים switch לפי v.getId() כדי לדעת איזו תמונה נלחצה.Callbacks עם פונקציה אחת, onImageClicked(int imageId).getActivity(), בודקים עם instanceof שהיא מממשת את Callbacks, עושים casting וקוראים ל-onImageClicked עם ה-ID של התמונה ב-R.drawable.FrameLayout כקונטיינר ו-ImageView גדול. הקוד מוסיף את הפרגמנט רק כש-savedInstanceState הוא null (בלי newInstance, כי אין מידע להעביר), והאקטיביטי מממשת את ImagesFragment.Callbacks.onImageClicked האקטיביטי קוראת ל-setImageResource על ה-ImageView עם ה-ID שהתקבל. בהרצה, כל לחיצה מציגה את התמונה המתאימה בגדול.getActivity(), instanceof, findViewById, setImageResource, getSupportFragmentManager().beginTransaction().add(...) ו-commit.instanceof מבטיחה שהפונקציה קיימת, כי אחרת האקטיביטי לא הייתה מצליחה לממש את הממשק.הטקסט המלא של הדקות הראשונות בהרצאה «קבלת מידע בחזרה מ-Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כאשר אנחנו עובדים עם Fragments, יכול להיות מצב שבו אנחנו רוצים שהFragments תשלח מידע לעולם החיצון. לדוגמה, לאקטיביטי שמשתמשת בה. אולי כי אנחנו רוצים שהמידע הזה יוצג באקטיביטי או יגיע לאקטיביטי והאקטיביטי תשתמש בו באיזושהי צורה.
אולי כי אנחנו רוצים להעביר את המידע הזה לאקטיביטי בכדי שהאקטיביטי תעביר את המידע הזה לפרגמנט אחר, יש כל מיני סיבות לבצע את זה. אז איך בדיוק אנחנו יכולים להעביר מידע מהפרגמנט לאקטיביטי שמשתמשת בפרגמנט?
הרי אם האקטיביטי מכילה בתוכה את הפרגמנט, ברור שהאקטיביטי מכירה את הפרגמנט, וכך יכולה לשלוח למידע. עשינו את זה בסרטון הקודם. אבל אם הפרגמנט נמצאת בתוך האקטיביטי, הפרגמנט לא מכירה את האקטיביטי.
אז איך בדיוק הפרגמנט יכולה להעביר מידע לאקטיביטי? אז בסרטון הזה אנחנו הולכים לצרף איזושהי פרגמנט שהולכת לקבל מידע מהיוזר על ידי איזושהי בחירה מסוימת, ולהעביר את המידע הזה לאקטיביטי שהיא מוכלת בתוכה.
האקטיביטי תשתמש במידע הזה. אז בואו נצרף פרגמנט חדשה, נבצע add, פרגמנט, נבחר פרגמנט בלנק, ואנחנו רוצים פרגמנט שתציג מידע לגבי תמונות.
אז בואו נקרא ל-images-fragment, ניפטר משני החבר'ה האלה, נבצע finish, והנה אנחנו רואים את קוד ה-Java של ה-fragment, בואו טיפה, ננקה אותו, עם constructor רקע אנחנו חייבים, אבל אם אין לנו אז אוטומטית הוא נוצר, בואו ניפטר מהשואר רקע הזאת והזאת, וכעת אנחנו יכולים לגשת ל-fragment layout, ולעצב את ה-layout כמו שאנחנו רוצים.
אז מה שאנחנו רוצים לעשות זה להכיל כאן מספר תמונות. אז בואו נגדיר כאן linear layout, וניפטר מזה, וניפטר מזה, והlinear layout אמורה להיות הוריזונטלית, וזה הדפולט, ניפטר מזה, ופה אנחנו רוצים שיהיה לנו מספר תמונות.
אנחנו רוצים שניתן יהיה ללחוץ על התמונות האלה. אז בואו נגדיר את התמונות כ-image button, שאז המשתמש יוכל לראות בעצם שהוא לוחץ על תמונה.
עכשיו, בגלל שאנחנו רוצים להציג את זה בצורה אופקית, אז בואו נגדיר 0 dp לרוחב, נגדיר 80 dp לגובה, נגדיר איזשהו id לתמונה, image, button, התמונה הראשונה שנוצגת יש של בני.
נגדיר weight 1, נגדיר scale type fit xy, ולבסוף התמונה עצמה נמצאת בתוך drop-on, והיא נקראת בני. אנחנו רוצים 4 כאלה, אז הנה 1, 2, 3 ו-4, כאשר אנחנו רוצים להחליף את התמונות עצמם ואת ה-id.
יש לנו כאן Duckling, יש לנו כאן Kitten, ובואו נגדיר כאן את הפאפי הידוע שהיה לנו. והנה יש לנו עכשיו Fragment שמכילה ארבע תמונות. מה אנחנו רוצים לעשות?
אנחנו רוצים להציב את הפרגמנט הזאת על האקטיביטי, ואנחנו רוצים לאפשר למשתמש ללחוץ על תמונה. ברגע שהמשתמש לוחץ על התמונה, אנחנו רוצים להעביר לפארנט אקטיביטי שלנו איזו תמונה המשתמש לחץ עליה.
ואז מה שאנחנו רוצים לעשות בפרנט אקטיביטי זה להציג את התמונה בגדול. בשביל זה אנחנו צריכים שהפרגמנט תעביר את המידע למין אקטיביטי. אז איך הפרגמנט יכולה לעשות את זה?
אז דבר ראשון מה שאנחנו צריכים לעשות זה להיכנס לקוד של הפרגמנט ובואו נחלק את השורה הזאת לשני חלקים. חלק ראשון אנחנו רוצים את ה-Linear Layout. בואו נגדיר פה Linear Layout, Linear Layout, Root.
זה בעצם תגיד את השורש של ה-Fragment, של ה-Layout של ה-Fragment, וכמו שהשתמשנו בה, זאת הייתה Linear Layout. כאן בסוף, בסוף, בסוף, אנחנו רוצים להחזיר את ה-Layout Root.
כעת אנחנו רוצים להשיג את ארבעת אובייקטי ה-Image Button. אז בואו ניקח את ה-Image Button הראשונה שהייתה בני. נלך ל-Image Button, בצורה כזאת.
דרך ה-Linear layout root, אנחנו רוצים לפנות ל-FindViewByID, ולתת R, ID, Image, Button, והתמונה הראשונה הזאת הייתה בני. נשכפל, 2, 3, 4, אחרי הבני, היה לנו Duckling, ובואו נגדיר כאן שהתמונה היא Duckling, ה-ID basically, ולאחר מכן היה לנו kitten, נגדיר שה-ID שאנחנו מחפשים הוא kitten,
ולבסוף puppy, ונגדיר כאן שה-ID הוא puppy. אחרי שיש לנו את ארבעת הרכיבים, אנחנו יכולים לגשת לכל אחד מהם, image button, נתחיל עם הבני, ו-to register on click listener.
בואו ניתן את הפרגמנט עצמה ככזאת שמממשת את האינטרפייס, נלחץ Alt Enter, Make Images Fragment Implement, On Click, Listener. יש לנו פה את האירוע On Click, נגיד לו בסדר.
הנה אנחנו רואים פה למעלה את האימפלמנט של האינטרפייס, והנה On Click. נשכפל את השורה הזאת, כך שכל אחת מהתמונות תעלה את אותו אירוע.