סטודיו אנדרואיד איך קוראים לשיטה בפעילות אחרת


תשובה 1:

אם אתה מתייחס למשהו כמו:

MainActivity חדש (). doMyMethod ();

אז זה לא אפשרי.

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

הוספת מידע נוסף על מה שאתה מנסה להשיג לתיאור השאלה שלך תעזור.

לַעֲרוֹך:

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

ראשית, צור ממשק להעברת הנתונים שברצונך לשלוח מ- BroadcastReceiver שלך. הנה, למשל, זהו OnSampleReadyListener

כיתת הגמר הציבורית SampleReceiver מרחיבה את BroadcastReceiver { גמר סטטי ציבורי מחרוזת SAMPLE_DATA_EXTRA = "sample_extra"; פרטי OnSampleReadyListener mlistener; @SuppressWarnings ("לא בשימוש") SampleReceiver ציבורי () {} SampleReceiver ציבורי (מאזין OnSampleReadyListener) { מליסטינר = מאזין; } @Override חלל ציבורי על קבלה (הקשר הקשר, כוונת כוונה) { מחרוזת סופית someExampleData = intention.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); } ממשק ציבורי OnSampleReadyListener { בטל onSampleDataReady (מחרוזת someExampleData); }}

לאחר מכן, הגדר את מחלקת הפעילות שלך כדי להעביר מופע של OnSampleReadyListener, והגדר את הפעילות שלך להאזנה לשידורים:

מחלקה ציבורית MainActivity מרחיבה את AppCompatActivity מיישמת OnSampleReadyListener { פרטי SampleReceiver mReceiver; @Override חלל מוגן onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // העבירו מופע של המאזין למקלט שלכם ... mReceiver = SampleReceiver חדש (זה); }//.. הגדר את הפעילות שלך להאזנה למקלט השידור שלך ... // הפעל כאן כל הגיון שקשור לשידורים שהתקבלו @Override חלל ציבורי onSampleDataReady (מחרוזת someExampleData) { Log.d ("TAG", "נתונים שהתקבלו:" + someExampleData); }}

תשובה 2:

1. Mainactivity ראשי = MainActivity חדש ()

Main.doSomeWork ():

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

2. אתה יכול להעביר את המופע של Mainactivity למחלקה אחרת ולהתקשר למופע.doWork, ()

זה לא מומלץ מכיוון שתעבור הקשר ועשוי להשאיר אותו בחיים כשאין צורך בכך.

3. ניתן ליצור שיטה סטטית ב- Mainactivity ולקרוא ל- MainActivity.doSomeWork (). לשיטה שלך לא תהיה גישה לדברים שאינם סטטיים אחרים.

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

5. צור Mainactivty כ- singleton וקרא MainActivity.getInstance (). DoSomeWork (). זה עובד טוב עבור שיעורי בקר.

6. צור מקלט שידור, הירשם לפעילות והתקשר אליו מהכיתה שתזדקק להקשר.

7. אתה משתמש במטפל ומעביר הודעות.

8. השתמש בספריית העברת הודעות כמו greenbot.


תשובה 3:

הגדר שיטה ציבורית בפעילות שלך:

חלל ציבורי פו () { //דברים}

ואז בכיתה:

((YourActivity) getActivity) .foo ();

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


תשובה 4:

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

אז ברוב המקרים אין צורך לגשת לשיטות שלהם.

אם יש לך היגיון משותף, ברצונך להשתמש בו, נסה להפריד אותו באמצעות אחד מדפוסי עיצוב האדריכלות MVP-MVVM- .. וכו '.


תשובה 5:

אתה יכול להעביר את המופע של הפעילות העיקרית בבנאי של אותה כיתה.

MyClass (פעולות עיקריות, ... ..)

{

זה.פעילות ראשית = פעילות עיקרית;

}

mainactivity.method ();


תשובה 6:

כוונת כוונה = כוונה חדשה (הקשר, TargetActivity.class);

startActivity (כוונה);

הערה: ל'הקשר 'יכולים להיות ערכים שונים בהתאם למצב. חביב StackOverflow