如何在另一个 class 中使用 onActivityResult

How to use onActivityResult in another class

我想在不扩展 activity 的 class 中使用 onActivityResult,但是这个 class 有一个全局变量作为 activity 的实例。这个 class 类似于这个:

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

我正在寻找这样的东西:

myActivity.setOnActivityResult...

谢谢!

您可以执行以下操作

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

感谢这个答案:

这不可能覆盖 ActivityResult() 上的实例,但可以执行以下方法。 主要的想法是创建你的 class ,它在代码中调用你的自定义函数; 在这种情况下

也就是说,您的 activity class 必须由 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;
}
}

在您的 public myClass 中使用 public ABase 代替 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);

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

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