startActivityForResult()
只能从真正的屏幕活动中获得,因为它是 Activity 中的一种方法。请重新设计您的应用程序,以便用户界面由活动驱动。
另一方面,如果您的非 Activity 类是从屏幕上的 Activity 初始化和使用的,则可以将该 Activity 的实例作为构造函数中的参数传递给您的类,并使用它来启动其他 Activity。
不过要小心。使用此方法会增加内存泄漏的风险,因为外部类(在我的示例中为 Utils)可能会保留对 Activity 的引用,即使它消失了。
如果您只想访问数据,那么您可以尝试将其写入 SharedPreferences 或数据库或某些文件,然后使用应用程序上下文(再次通过构造函数传入)来读取它。这降低了内存泄漏的风险。就像是:
MyApiClass myApiClass = new MyApiClass(getApplicationContext());
示例代码
主要活动:
public class Main extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils util = new Utils(this);
util.startTest();
}
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
Toast.makeText(this, "onActivityResult called", Toast.LENGTH_LONG).show();
super.onActivityResult(arg0, arg1, arg2);
}
}
Utils 类(为结果而启动):
public class Utils {
Activity activity;
public Utils(Activity ac) {
activity = ac;
}
public void startTest() {
Intent i = new Intent(activity, Test.class);
activity.startActivityForResult(i, 1);
}
}
测试活动:
public class Test extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
this.setResult(Activity.RESULT_OK);
this.finish();
}
}