使用非活动的startActivityForResult

ray*_*man 76 java android

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

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

所以使SimpleClass使用'startActivityForResult的唯一方法; 是将MainActivity的引用作为Activity变量传递给SimpleClass,如下所示:

在MainActivity类中,我以这种方式创建SimpleClass的实例:

SimpleClass simpleClass=new SimpleClass(MainActivity.this);
Run Code Online (Sandbox Code Playgroud)

现在这就是SimpleClass的样子:

public Class SimpleClass {

Activity myMainActivity;

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


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

}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.射线.

Som*_*ent 61

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

试试这个:

if (mContext instanceof Activity) {
        ((Activity) mContext).startActivityForResult(...);
} else {
        Log.e("mContext should be an instanceof Activity.");
} 
Run Code Online (Sandbox Code Playgroud)

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

  • 不,它确实发布了一个强制转换异常! (9认同)
  • 我因为Context!= Activity而被投票 (5认同)
  • 上下文不一定是活动(例如,如果它是通过“myActivity.getApplicationContext()”获取的) (2认同)

cod*_*ser 4

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

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

myMainActivity对结果有什么影响吗?如果是这样,那么只需创建SimpleClassActivity 的子类并从其内部处理结果即可SimpleClass
如果myMainActivity需要结果,那么也许您应该重构代码以从 开始活动myMainActivity

  • 我正在使用结果,只是想将它分离到不同的类,所以我想知道如何将 Activity 参数传递给非 Activity 类,而不导致将来泄漏。 (2认同)