Использовать 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