从非活动使用startActivityForResult
我有MainActivity这是一个活动和其他类(这是一个简单的Java类),我们将其称为“SimpleClass”。 现在我想从该类运行startActivityForResult命令。
现在我虽然我可以通过该类(SimpleClass),只有MainActivity的上下文,问题是,你不能运行context.startActivityForResult(…);
所以使SimpleClass使用“startActivityForResult; 是将MainActivity的引用作为一个Activityvariables传递给SimpleClass,就像这样:
在MainActivity类中,我通过这种方式创buildSimpleClass的实例:
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(...); } }
现在它的工作,但不是一个正确的方式做到这一点? 我恐怕将来可能会有一些内存泄漏。
谢谢。 射线。
我不知道这是否是好的做法,但是casting a Context object to an Activity object
编译好。
尝试这个:
if (mContext instanceof Activity) { ((Activity) mContext).startActivityForResult(...); } else { Log.e("mContext should be an instanceof Activity."); }
这应该编译,结果应该交付给持有上下文的实际活动。
如果你需要从前一个Activity得到结果,那么你的调用类需要是Activitytypes的。
如果您从不使用结果(至less根据您发布的示例代码Activity.startActivityForResult()
则调用Activity.startActivityForResult()
的目的是什么?
myMainActivity
是否对结果做任何事情? 如果是这样,那么SimpleClass
作为Activity的一个子类,然后处理SimpleClass
本身的结果。
如果myMainActivity
需要结果,那么也许你应该重构代码以从myMainActivity
开始活动。
更好的解决办法是
- 使
SimpleClass
成为Activity
类的一个子类 - 调用另一个Activity作为
startActivityForResult
- 在
SimpleClass
处理结果