6

I want to use onActivityResult in a class which not extends activity but this class has a global variable as an instance of activity. This class is similar to this :

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

I am looking for something like this:

myActivity.setOnActivityResult...

Thanks!

Payam Roozbahani
  • 1,225
  • 15
  • 27

3 Answers3

7

you could do the following

public class myClass(){

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

          //right your code here .
   }
}

and in your CLASS EXTENDS ACTIVITY write this inside the onActivityResult Method :

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

thnx to this answer :https://stackoverflow.com/a/21780532/3818437

Community
  • 1
  • 1
mhdjazmati
  • 4,152
  • 1
  • 26
  • 37
1

This is not possible to override of instance onActivityResult() but it is possible to do the way below. The major idea is to create your class which calls your custom function inside the code; In this case

That is, your activity class have to be extended by ABase not by Activity:

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

Then, ABase looks like this:

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;
}
}

in your public myClass use public ABase act instead of public Activity act; there is a setSomeFunction() for example to use:

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);

        }
    }
}
Vyacheslav
  • 26,359
  • 19
  • 112
  • 194
0
public class MyActivity extends Activity {

    public interface IResult {
        void call(Intent data);
    }

    public IResult r;


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

        if (resultCode != RESULT_OK) return;
        if (r == null) return;

        r.call(data);
    }

    void startZ() { Z.startZ(this); }
    void startY() { Y.startY(this); }
}

Z

class Z {
    public static void startZ(MyActivity a) {
        a.r = data -> {
            //...YOUR CODE HERE...
        };

        a.startActivityForResult(
                new Intent(a, ZActivity.class),
                request_code___not_needed_because_only_one_activity_lives);
    }
}

Y

class Y {
    public static void startY(MyActivity a) {
        a.r = data -> {
            //...YOUR CODE HERE...
        };

        a.startActivityForResult(
                new Intent(a, YActivity.class),
                request_code___not_needed_because_only_one_activity_lives);
    }
}
Vadim Star
  • 57
  • 1
  • 5