使用启动活动从非活动获得结果

2022-08-31 11:46:07

我有MainActivity,它是一个Active和其他类(这是一个简单的java类),我们称之为“SimpleClass”。

现在我想从该类运行命令。startActivityForResult

虽然我可以传递该类(SimpleClass),仅使用MainActivity的上下文,但问题是我们无法运行 。context.startActivityForResult(...);

因此,使 SimpleClass 使用 的唯一方法是将 MainActivity 作为活动变量的引用传递给 SimpleClass。startActivityForResult

像这样:

在 MainActivity 类中,我按如下方式创建了 SimpleClass 的实例:

SimpleClass simpleClass = new SimpleClass(MainActivity.this);

现在,这就是SimpleClass的样子:

public Class SimpleClass {

Activity myMainActivity;

   public SimpleClass(Activity mainActivity) {
       super();
       this.myMainActivity=mainActivity;    
   }
....


    public void someMethod(...) {
        myMainActivity.startActivityForResult(...);
    }

}

现在它正在工作,但是没有一种正确的方法来做到这一点吗?我担心将来可能会有一些内存泄漏。


答案 1

我不知道这是否是好的做法,但编译得很好。casting a Context object to an Activity object

试试这个:

if (mContext instanceof Activity) {
        ((Activity) mContext).startActivityForResult(...);
} else {
        Log.e("mContext should be an instanceof Activity.");
} 

这应该编译,并且结果应该传递给保存上下文的实际活动。


答案 2

如果需要从上一个活动中获取结果,则调用类的类型需要为活动。

如果您从未使用结果(至少根据您发布的示例代码),则调用的目的是什么?Activity.startActivityForResult()

对结果做任何事情吗?如果是这样,那么只需创建 Activity 的子类,并从自身内部处理结果。
如果需要结果,那么也许您应该重构代码以从 开始活动。myMainActivitySimpleClassSimpleClassmyMainActivitymyMainActivity


推荐