通常,为了从Activity类中启动一个新的Activity并获得它的结果,我将使用
的 public void startActivityForResult (Intent intent, int requestCode) 的
但是,如果我尝试从非Activity类启动新Activity并获取其结果,该怎么办?我怎么能做到这一点?
我问的原因是因为我目前正在使用LoginManager
类(非活动类)。它有以下代码。
accountManager.getAccountManager().getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
if (bundle.containsKey(AccountManager.KEY_INTENT)) {
Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
// Compilation error, as LoginManager doesn't have startActivityForResult method.
startActivityForResult(intent, REQUEST_AUTHENTICATE);
答案 0 :(得分:2)
((Activity) mContext).startActivityForResult(.....)
可以解决问题。
但结果将传递给持有上下文的实际活动。
您可以申请以下方法
在LoginManager类中创建单个参数构造函数,如下所示。
class LoginManager
{
private Context mContext;
LoginManager(Context mContext)
{
this.mContext=mContext;
}
.............................
//Then whenever you want to call method call like this.
((Activity) mContext).startActivityForResult(.....)
}
现在在Activity类中,只要你创建了LoginManager类的Object,就按如下方式创建。
LoginManager loginManager=new LoginManager(ActivityName.this);
答案 1 :(得分:0)
我希望你的项目中的活动扩展某种“BaseActivity”。在该基本活动中,我将覆盖onActivityResult()并从那里将结果传递给LoginManager。
这将导致您的所有活动将其结果传递给您的LoginManager,因此您无需在任何地方继续覆盖onActivityResult。
答案 2 :(得分:0)
也许您只需将Context
的引用发送到LoginManager
课程并使用它来启动Activity
?