використовувати startActivityForResult від неактивності


82

У мене є MainActivity, який є Activity та іншим класом (який є простим Java-класом), ми будемо називати його "SimpleClass". тепер я хочу запустити з цього класу команду startActivityForResult.

тепер я хоч би міг передати цей клас (SimpleClass), лише контекст MainActivity, проблема в тому, що не можна запускати context.startActivityForResult (...);

так що єдиний спосіб зробити SimpleClass використовувати 'startActivityForResult; полягає в передачі посилання на MainActivity як змінну Activity для SimpleClass приблизно такого:

всередині класу MainActivity я створюю екземпляр SimpleClass таким чином:

SimpleClass simpleClass=new SimpleClass(MainActivity.this);

тепер ось як виглядає SimpleClass:

public Class SimpleClass {

Activity myMainActivity;

   public SimpleClass(Activity mainActivity) {
       super();
       this.myMainActivity=mainActivity;    
   }
....


    public void someMethod(...) {
        myMainActivity.startActivityForResult(...);
    }

}

зараз це працює, але хіба це не правильний спосіб зробити це? Я боюся, що у мене можуть трапитися деякі витоки пам’яті в майбутньому.

Дякую. промінь.


Я не знаю, що ти намагаєшся зробити, але ти повинен прочитати це .
Macarse

1
Роблячи це, чи могли б ви використовувати onActivityResultметод всередині вашого simpleClass або ви не мали наміру? Тут та сама проблема ..
Vivere_FlowCoder

Відповіді:


64

Не знаю, хороша практика це чи ні, але casting a Context object to an Activity objectкомпілюється чудово.

Спробуйте це:

if (mContext instanceof Activity) {
        ((Activity) mContext).startActivityForResult(...);
} else {
        Log.e("mContext should be an instanceof Activity.");
} 

Це слід скласти, а результати доставити до фактичної діяльності, що містить контекст.


Як щодо того, якщо контекст передається від служби?
Мадхур Ахуджа

9
Ні, він запускає виняток для складання!
Lisa Anne

1
Контекст не є неминучою діяльністю (наприклад, якщо його добутиmyActivity.getApplicationContext()
Hugo Gresse

Якщо метою є уникнути витоку пам’яті, яка перевага утримання контексту як змінної-члена класу перед проведенням діяльності? Хіба зберігання контексту не має такого самого потенціалу, щоб призвести до витоку пам’яті, як зберігання діяльності?
stevehs17

4

Якщо вам потрібно отримати результат із попередньої активності, тоді ваш клас виклику повинен бути типу Activity.

Яка мета вашого дзвінка, Activity.startActivityForResult()якщо ви ніколи не використовуєте результат (принаймні відповідно до розміщеного вами зразка коду).

Щось myMainActivityробить із результатом? Якщо так, то просто створіть SimpleClassпідклас Activity та обробляйте результат зсередини SimpleClass.
Якщо myMainActivityпотрібен результат, то, можливо, вам слід переформатувати код, щоб почати діяльність myMainActivity.


2
Я використовую результат, просто я хочу розділити його на різний клас, тому мені було цікаво, як я повинен передавати параметр Activity в клас неактивності, не викликаючи витоків у майбутньому.
rayman

1
А як щодо створення SimpleClass вкладеного класу?
кодування

0

Кращим рішенням є:

  1. Складання SimpleClassпідкласу вашого Activityкласу
  2. називаючи іншу діяльність як startActivityForResult
  3. обробка результату в SimpleClassсобі

3
здається, це має спрацювати, але я зрозумів таке:java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
Хлопчик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.