如何在另一个 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);
}
}
我想在不扩展 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);
}
}