בקשת מידע | יצירת אירוע סטטי בהרחבה
-
-
@mefateach אם אתה צריך מחלקה מסוימת אז תרשום פשוט את השם שלה (
MainActivity activity
) ואם אתה צריך קונטקסט פשוט בשביל פעולות מסוימות אז תעביר קונטקסט (Context context
) (אם תפרט יותר את הסיטואציה או את הבעיה שאותה אתה מנסה לפתור זה יעזור יותר לאחרים לעזור לך) -
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
אם אתה צריך מחלקה מסוימת אז תרשום פשוט את השם שלה (MainActivity activity)
אני אסביר יותר (כמובן אני לא יודע על רמת הידע שלך בתכנות אבל אני אסביר ברמה הבסיסית) המילה
this
לא אומרת כלום אם אתה כותב אותה במתודה סטטית כי מתודה סטטית לא קשורה לשום קונטקסט היא פועלת בפני עצמה בלי קשר למחלקה שבה היא נמצאת והמילהthis
הכוונה לקרוא למחלקה שאתה נמצא בה כלומר: למשל אם אתה כותבthis
במחלקהMainActivity
אז הthis
הוא פועל בדיוק במקום המילהMainActivity
- הפירוש של המילה הזאת היא קריאה למחלקה עצמה מתוכה ואי אפשר לקרוא למחקה עצמה מתוך מתודה סטטית כי מתודה סטטית היא כאילו לא נמצאת במחלקה -
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
אם אתה צריך מחלקה מסוימת אז תרשום פשוט את השם שלה (MainActivity activity)
אני אסביר יותר (כמובן אני לא יודע על רמת הידע שלך בתכנות אבל אני אסביר ברמה הבסיסית) המילה
this
לא אומרת כלום אם אתה כותב אותה במתודה סטטית כי מתודה סטטית לא קשורה לשום קונטקסט היא פועלת בפני עצמה בלי קשר למחלקה שבה היא נמצאת והמילהthis
הכוונה לקרוא למחלקה שאתה נמצא בה כלומר: למשל אם אתה כותבthis
במחלקהMainActivity
אז הthis
הוא פועל בדיוק במקום המילהMainActivity
- הפירוש של המילה הזאת היא קריאה למחלקה עצמה מתוכה ואי אפשר לקרוא למחקה עצמה מתוך מתודה סטטית כי מתודה סטטית היא כאילו לא נמצאת במחלקהאת זה ידעתי. הבעיה שאני לא מבין מה אני יכול לשים במקום.
הנה הקוד המלא:package com.mordechay.mefateach.addtileinsystemui.addtilesystemui; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Build; import android.os.Bundle; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import com.google.appinventor.components.annotations.*; import com.google.appinventor.components.runtime.AndroidNonvisibleComponent; import com.google.appinventor.components.runtime.Button; import com.google.appinventor.components.runtime.Component; import com.google.appinventor.components.runtime.ComponentContainer; import android.app.Activity; import android.widget.Toast; import androidx.core.view.KeyEventDispatcher; import com.google.appinventor.components.runtime.EventDispatcher; import com.google.appinventor.components.runtime.Form; import com.google.appinventor.components.runtime.HandlesEventDispatching; import com.google.appinventor.components.runtime.OnDestroyListener; public class AddTileSystemUI extends AndroidNonvisibleComponent { //Activity and Context private final Context context; private final Activity activity; private final Form form; public AddTileSystemUI(ComponentContainer container) { super(container.$form()); this.form = container.$form(); this.activity = form.$context(); this.context = activity.getApplicationContext(); } // @SimpleEvent(description = "") public static void onClicked() { EventDispatcher.dispatchEvent(this, "onClicked"); } }
-
@mefateach אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
מה התכנון? (מה אתה מנסה לעשות)
-
@jacobel640 אני יסביר
אני מנסה ליצור הרחבה לקודולר שמוסיפה לחצן לסאאוס בר, מצאתי קוד ב kotlin שעושה את זה, (ניסיתי לעשות את זה ב java ולא עבד)
כדי ליצור את זה המחלקה חייבת extend (ירושה, לא ידעתי איך לנסח את זה ) ממחלקה TileService יצרתי את המחלקה עם כל מה שצריך, הבעיה היא שהתוסף של קודולר כדי ליצור אירוע חייב להיות extens ממחלקה AndroidNonvisibleComponent
וחייב בתוך האירוע את זה:EventDispatcher.dispatchEvent(this, "event name");
אז יצרתי קריאה מהאירוע שבמחלקה kotlin שיקרא לפונקציה onClicked הבעיה שהמותודה חייבת להיות סטטית...
נ.ב. מישהו הציע לי להשתמש ב BroadcastReceiver הבעיה שלא הבנתי איך עושים את זה
(מקווה שהובנתי )
-
@mefateach וואו וואו א' אתה מנסה לעשות כמה דברים שסותרים אחד את השני אני לא יודע למה ומי אמר לך שהמתודה צריכה להיות סטטית וב' אין לי כ"כ מה להסביר כי אתה משתמש ב"קודולר" (אני מניח שזה איזושהי תוכנה בעלת ממשק גרפי לבניית אפליקציות) שזה ללא שימוש בקוד) ואין שום קשר בין ה
onClick
לAddTileSystemUI
ובפרט עכשיו שהיא מרחיבה בכללAndroidNonvisibleComponent
ולאTileService
שזה שינה את תפקיד המחלקה לגמרי
(סורי חשבתי שהשאלה שלך היא שאלה בתכנות אבל אתה בעצם מדבר על תוכנה לבניית אפליקציות שאני לא מכיר ואין לי איך להדריך אותך) -
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
(סורי חשבתי שהשאלה שלך היא שאלה בתכנות אבל אתה בעצם מדבר על תוכנה לבניית אפליקציות שאני לא מכיר ואין לי איך להדריך אותך)
זה שאלה בתיכנות רק יש כמה דברים שבתיכנות רגיל לא חייבים ובזה כן (חייבים לירוש את המחלקה AndroidNonvisibleComponent ובשביל ליצור אירוע חייבים לכתוב @simpleEvents ו dispathEvent
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
וואו וואו א' אתה מנסה לעשות כמה דברים שסותרים אחד את השני
מה(אשמח שתחכים אותי, כנראה זה בגלל שכבר שנים לא התעסקתי עם java )
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
ני לא יודע למה ומי אמר לך שהמתודה צריכה להיות סטטית
תאמת שהחלטתי לבד, מה האפשרות האחרת?
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
וב' אין לי כ"כ מה להסביר כי אתה משתמש ב"קודולר" (אני מניח שזה איזושהי תוכנה בעלת ממשק גרפי לבניית אפליקציות) שזה ללא שימוש בקוד) ו
נכון, אבל אני יוצר הרחבות כך שזה כמעט תיכנות רגיל לכל דבר
@jacobel640 אמר בבקשת מידע | יצירת אירוע סטטי בהרחבה:
ואין שום קשר בין הonClick לAddTileSystemUI ובפרט עכשיו שהיא מרחיבה בכלל AndroidNonvisibleComponent ולא TileService שזה שינה את תפקיד המחלקה לגמרי
כמובן, אבל כפי שהסברתי אני מנסה להעביר את האירוע למחלקה AddSystemUI מהמחלקה השנייה שכתובה ב kotlin (שכמובן מרחיבה את tileService אני מנסה לקרוא לפונקציה onClicked מהפונקציה onClick וכך בעצם נוצר לי אירוע (יש אפשרות אחרת?)
-
-