2017-12-14 16 views
7

何Androidの断片でgetActivity().startActivityForResult()startActivityForResult()との違い?そして、フラグメントで呼び出されたときのonActivityForResult()の動作の違いは何ですか?startActivityForResult()Androidの断片でgetActivity()。startActivityForResult()対

+0

https://developer.android.com/reference/android/app/Activity.html#onActivityResult(int、int、android.content.Intent)、https://developer.android.com/training/basics/ intents/result.html –

+0

Android開発用のドキュメントがあることをご存知ですか? –

答えて

2

startActivityForResult()からそれを処理しなければならないfragmentさんonActivityForResult()

getActivity().startActivityForResult()からそれを処理する必要がありますactivityの基本的onActivityForResult()

あなたはfragmentにしている場合と、 fragmentの結果を処理したい場合はonActivityForResult()を使用してください。あなたはフラグメントのactivityからそれを処理したい場合は少し差がgetActivity()であるgetActivity.startActivityForResult()

全く
1

アクティビティ内にstartActivityForResult()、フラグメント内にgetActivity().startActivityForResult()を使用できます。

すぐに、私たちはgetActiviy()でそれを先行しています。

代わりに、我々はActiivtyから以下のように)(特定のフラグメントのonActivityResultを呼び出すことができます。:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    for (Fragment fragment : getChildFragmentManager().getFragments()) { 
     fragment.onActivityResult(requestCode, resultCode, data); 
    } 
} 

我々は、より多くの細部にそれを置く場合は、

をあなたは、あなたのフラグメントからstartActivityForResult()を呼び出す場合requestCodeは、Fragmentを所有するアクティビティによって変更されます。

あなたの活動で正しいのresultCodeを取得したいのであれば、あなたは以下のように試すことができます:

は使用しないでください:(このような場合の):

startActivityForResult(intent, 1); 

使用します。

getActivity().startActivityForResult(intent, 1); 

希望すると..!

+0

実際には 'getActivity()'を使わずに 'startActivityForResult()'をフラグメントで使用しました。だから私は行動の違いを尋ねる。 –

+1

@j.elmerを参照してください。このような違いはありません。しかし、ちょっと違う点は、GetActivity()。startActivityForResult()をフラグメントでのみ使用して、Activity of Contextを取得できることです。 –

+0

フラグメント内の別々の 'startActivityForResult'メソッドの全体のポイントは、アクティビティのonActivityResult内のすべてのフラグメントを通過する必要性を避けることです。それはまさに間違ったことです。 – ianhanniballake

0

は違い... しかしを使用し、rwise。startActivityForResult()のみの断片から呼び出すことができます:)

2

startActivityForResultフラグメントコールからstartActivityForResultそのコンテナアクティビティ。 フラグメント用: -

フラグメントのcontainsアクティビティからstartActivityForResult(Intent、int)を呼び出します。あなたが直接、いくつかの特定の変更は、リクエストに応じて行うことができるフラグメントでそれを使用するときには

は、私が最近変更要求コードといくつかの問題に直面している原因あなたは、onActivityresult()でリクエストコードを変更されますcode.And。あなたはThis Threadを調べることができます。

0

は、Activityで指定された方法であるため、Activityを参照して電話をかけてください。startActivityForResult(Intent intent, int requestCode)です。この場合になります

YourActivity extends AppCompatActivity (which is subclass of `Activity`) 

しかし、あなたはYourFragmentからそれを呼び出している場合は、Activity参照を指定する必要があり、:だから

、あなたがYourActivityから呼び出した場合、それはすでに同じようActivityの参照を持っていますYourFragmentを含む活性;したがって、getActivity()を使用してトリガーします。startActivityForResult()

0

"startActivityForResult()"はアクティビティクラスで機能します。 アクティビティクラスでは、このメソッドを直接使用することができます。 フラグメントは、フラグメントがアクティビティーで作成されているため、まずそのフラグメントに基づいてアクティビティーを取得する必要があります。意味:

//in fragment class: 
Activity activity = this.getActivity(); 

は今、あなたが活動をしていると私は言った、あなたがフラグメントから取得活動の「startActivityForResult()」を使用することができます。

activity.startActivityForResult(); 

希望が助けます。

関連する問題