0

通常,为了启动一个新的 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);
4

3 回答 3

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(.....)

}

现在,每当您创建 LoginManager 类的对象时,在 Activity 类中创建如下。

LoginManager loginManager=new LoginManager(ActivityName.this);
于 2012-06-26T14:02:36.377 回答
0

我会让您项目中的活动扩展某种“BaseActivity”。在该基本活动中,我将覆盖 onActivityResult() 并将结果从那里传递给 LoginManager。

这将使您的所有活动都将其结果传递给您的 LoginManager,因此您不必在任何地方手动覆盖 onActivityResult。

于 2012-06-26T13:56:33.927 回答
0

也许您可以将您的参考发送ContextLoginManager课程中并使用它来启动Activity?

于 2012-06-26T13:57:26.930 回答