使用非活动的startActivityForResult

时间:2010-05-17 11:56:48

标签: java android

我有MainActivity这是一个Activity和其他类(这是一个简单的java类),我们称之为“SimpleClass”。 现在我想从该类运行命令startActivityForResult。

现在我虽然我可以传递那个类(SimpleClass),只有MainActivity的上下文,问题是,你不能运行context.startActivityForResult(...);

这是使SimpleClass使用'startActivityForResult的唯一方法;是将MainActivity的引用作为Activity变量传递给SimpleClass 类似的东西:

在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(...);
    }

}

现在它的工作,但不是一个正确的方法这样做?我恐怕将来可能会有一些内存泄漏。

感谢。 射线。

3 个答案:

答案 0 :(得分:58)

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

试试这个:

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

这应该编译,结果应该传递给持有上下文的实际活动。

答案 1 :(得分:3)

如果您需要从上一个Activity获取结果,那么您的调用类必须是Activity类型。

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

myMainActivity对结果做了什么吗?如果是这样,那么只需将SimpleClass作为Activity的子类,并从SimpleClass本身处理结果。
如果myMainActivity需要结果,那么您可能应该重构代码以从myMainActivity开始活动。

答案 2 :(得分:0)

更好的解决方案是:

  1. 使SimpleClass成为Activity
  2. 的子类
  3. 将另一个活动称为startActivityForResult
  4. SimpleClass本身
  5. 内处理结果