通过非Activity类启动一个新Activity并获取其结果

时间:2012-06-26 13:50:45

标签: android

通常,为了从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);

3 个答案:

答案 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