Как использовать onActivityResult в другом классе

Я хочу использовать onActivityResult в классе, который не расширяет активность, но этот класс имеет глобальную переменную как экземпляр активности. Этот класс похож на этот:

public class myClass(){
    public Activity myActivity;
    .
    .
    .
    // I want to add onMyActivityResult here
}

Я ищу что-то вроде этого:

myActivity.setOnActivityResult...

Спасибо!


person Payam Roozbahani Fard    schedule 09.01.2016    source источник
comment
см. stackoverflow.com/questions/21780252/   -  person sasikumar    schedule 09.01.2016
comment
не делай этого. если вы все еще хотите это сделать, внимательно изучите жизненный цикл Activity, а затем не делайте этого   -  person Nguyễn Hoài Nam    schedule 09.01.2016
comment
пожалуйста, попробуйте мой ответ и скажите, работает ли он для вас;)   -  person mhdjazmati    schedule 09.01.2016


Ответы (2)


вы можете сделать следующее

public class myClass(){

    public static void activityResult(int requestCode, int resultCode, Intent data){

          //right your code here .
   }
}

и в вашем CLASS EXTENDS ACTIVITY напишите это внутри метода onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       myClass.activityResult(requestCode,resultCode,data);
    }

Спасибо за этот ответ: https://stackoverflow.com/a/21780532/3818437

person mhdjazmati    schedule 09.01.2016
comment
Я не использовал этот метод, но я использовал почти такой метод, и он работает! - person Payam Roozbahani Fard; 10.01.2016
comment
Не лучше ли реализовать интерфейс, чем статический метод? - person abarazal; 22.02.2020

Это невозможно переопределить экземпляр onActivityResult(), но можно сделать так, как показано ниже. Основная идея состоит в том, чтобы создать свой класс, который вызывает вашу пользовательскую функцию внутри кода; В этом случае

То есть ваш класс активности должен быть расширен ABase, а не Activity:

public class yourClass extends ABase{
//your usual code is here.
}

Тогда ABase выглядит так:

public class ABase extends Activity {
private Callable<Void> clb;//this function will be called
protected void onActivityResult(int requestCode, int resultCode,
                Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (clb != null) {
                        try {
                        clb.call();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
}
public void setMyCallable(Callable<Void> callable){
this.clb = callable;
}
}

в вашем общедоступном myClass используйте public ABase act вместо public Activity act; например, setSomeFunction() можно использовать:

public class myClass {
public ABase act;
public static setSomeFunction() {
    if (act != null) {
        Callable<Void> clb = new Callable<Void>() {
                @Override
                public Void call() throws Exception {
                    Log.d(TAG, "is Called!");
                    return null;
                }
            }
        act.setMyCallable(clb);

        }
    }
}
person Vyacheslav    schedule 09.01.2016