2012-06-26 85 views
0

通常,爲了推出新的活動,並得到其結果,從活動類的,我會用啓動一個新的活動,並得到其結果,通過非活性類

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); 

回答

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類的對象時create如下。

LoginManager loginManager=new LoginManager(ActivityName.this); 
+0

可能不使用上下文嗎?因爲登錄管理員無權訪問上下文。 –

+0

你需要有活動上下文,否則你不能使用它! –

+0

,你可以在LoginManager類中創建一個接受活動上下文的單個參數構造函數!參見我更新的答案 –

0

我會對你的項目中的活動擴展某種「BaseActivity」的。在該基本活動中,我將重寫onActivityResult()並從那裏將結果傳遞給LoginManager。

這會讓您的所有活動將結果傳遞給您的LoginManager,因此您無需在任何地方手動覆蓋onActivityResult。

0

也許你可以發送一個Context的參考到LoginManager類中,並用它來啓動Activity

+0

我認爲他正在尋找如何將活動結果導入LoginManager。他可以從登錄管理器中啓動Activity,但在Activity退出時無法獲得結果。 – WindyB

相關問題