У меня есть 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(...);
}
}
теперь он работает, но разве это не правильный способ сделать это? Боюсь, у меня могут быть утечки памяти в будущем.
Благодарю. луч.
onActivityResult
метод внутри своего simpleClass или не намеревались? Та же проблема здесь ..Ответы:
Я не знаю, хорошая ли это практика или нет, но
casting a Context object to an Activity object
компилируется нормально.Попробуй это:
if (mContext instanceof Activity) { ((Activity) mContext).startActivityForResult(...); } else { Log.e("mContext should be an instanceof Activity."); }
Это должно быть скомпилировано, а результаты должны быть доставлены в фактическое действие, содержащее контекст.
источник
myActivity.getApplicationContext()
Если вам нужно получить результат от предыдущего Activity, тогда ваш вызывающий класс должен иметь тип Activity.
Какова цель вашего звонка,
Activity.startActivityForResult()
если вы никогда не используете результат (по крайней мере, согласно опубликованному вами образцу кода).Имеет ли
myMainActivity
сделать что - нибудь с результатом? Если да, то просто создайтеSimpleClass
подкласс Activity и обработайте результат изнутриSimpleClass
.Если
myMainActivity
нужен результат, то, возможно, вам следует провести рефакторинг кода, с которого будет начинаться действиеmyMainActivity
.источник
Лучшее решение:
SimpleClass
подкласса вашегоActivity
классаstartActivityForResult
SimpleClass
себяисточник
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference