использовать startActivityForResult от неактивности - PullRequest
74 голосов
/ 17 мая 2010

У меня есть 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(...);
    }

}

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

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

Ответы [ 3 ]

58 голосов
/ 29 декабря 2011

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

Попробуйте это:

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

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

3 голосов
/ 28 мая 2010

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

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

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

0 голосов
/ 13 октября 2011

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

  1. Создание SimpleClass подкласса вашего Activity класса
  2. вызов другой активности как startActivityForResult
  3. обработка результата внутри самого SimpleClass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...