0

通常、Activity クラスから新しい Activity を起動してその結果を取得するには、次を使用します。

public void startActivityForResult (インテント インテント、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 クラスの Object を作成するたびに、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

おそらく、あなたContextへの参照をLoginManagerクラスに送信し、それを使用してActivity?

于 2012-06-26T13:57:26.930 に答える