如何在另一个类中使用 onActivityResult
Posted
技术标签:
【中文标题】如何在另一个类中使用 onActivityResult【英文标题】:How to use onActivityResult in another class 【发布时间】:2016-04-13 23:51:21 【问题描述】:我想在一个不扩展活动但这个类有一个全局变量作为活动实例的类中使用 onActivityResult。这个类和这个类似:
public class myClass()
public Activity myActivity;
.
.
.
// I want to add onMyActivityResult here
我正在寻找这样的东西:
myActivity.setOnActivityResult...
谢谢!
【问题讨论】:
参考***.com/questions/21780252/… 不要这样做。如果你还想这样做,请仔细研究一下Activity的生命周期,然后不要这样做 请试试我的回答,告诉我它是否适合你;) 【参考方案1】: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);
【讨论】:
【参考方案2】:这无法覆盖实例 onActivityResult(),但可以按照以下方式进行。 主要思想是创建您的类,该类在代码中调用您的自定义函数; 在这种情况下
也就是说,你的 Activity 类必须由 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
代替 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);
【讨论】:
【参考方案3】:您可以执行以下操作
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://***.com/a/21780532/3818437
【讨论】:
我没用过这个方法,但是我用了差不多这样的方法,效果很好! 实现接口不是比静态方法更好吗? @abarazal 是的,最好避免使用静态方法以上是关于如何在另一个类中使用 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章