Использовать startActivityForResult из неактивных

У меня есть MainActivity, который является Activity и другим классом (который является простым классом java), мы будем называть его "SimpleClass". теперь я хочу запустить из этого класса команду startActivityForResult.

теперь, хотя я мог бы передать этот класс (SimpleClass), только контекст MainActivity, проблема в том, что u can not run 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(...);
    }

}

теперь работает, но разве это не правильный способ? Я боюсь, что в будущем у меня могут быть утечки памяти.

спасибо. лучей.

Ответ 1

Я не знаю, хорошо это или нет, но casting a Context object to an Activity object компилируется отлично.

Попробуйте следующее:

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

Это должно компилироваться, и результаты должны быть доставлены в фактическую активность, содержащую контекст.

Ответ 2

Если вам нужно получить результат из предыдущего действия, то ваш вызывающий класс должен иметь тип Activity.

Какова цель вызова Activity.startActivityForResult(), если вы никогда не используете результат (по крайней мере, в соответствии с приведенным вами примером кода).

Делает ли myMainActivity что-либо с результатом? Если да, тогда просто сделайте SimpleClass подкласс Activity и обработайте результат из самого SimpleClass.
Если myMainActivity нужен результат, то, возможно, вам нужно реорганизовать код для запуска активности с myMainActivity.

Ответ 3

Лучшее решение:

  • Создание SimpleClass подкласса класса Activity
  • вызов другого действия как startActivityForResult
  • обработка результата в самом SimpleClass