2013-03-29 10 views
7

カスタムListViewを持つ複数のフラグメントがあります。彼らは私のカスタムListAdapterを使用しています。リストの要素のクリックを処理します。私はこのOnClickListenerから別のアクティビティを開始し、いくつかの情報をFragmentに戻す必要があります。私はアダプタからstartActivityForResultを実行して結果をフラグメントに戻す方法

Intent intent=new Intent(context, DataFillerActivity.class); 
((Activity) context).startActivityForResult(intent, 3); 

を使用しようとするが、DataFillerActivityはMainActivityに、ではないフラグメントに結果を返します。 この問題を解決する最善の方法は何ですか?おかげ

答えて

3

があなたのフラグメントを更新するにはフラグメントのいずれかが、IDタグを見つけることができる、唯一の方法は、アクティビティの上にする必要があります。これは、フラグメントがモジュラー化されているためです。

http://developer.android.com/training/basics/fragments/communicating.html

あなたが結果をAcitivityを起動した場合、結果は要求を開始した活動に渡されます。これで目的のフラグメントにデータを渡すことができます。

2

は自分のActivityクラスでonActivityresultをオーバーライドし、活動の結果にフラグメントを渡し、あなたは

5

スティーブが書いているように、断片はモジュラーでなければなりません。ただし、これは、通信がではなく、はすべてのアクティビティを通過しますが、フラグメント内にとどまることを意味します。

これを解決するには、ListAdapterにフラグメントの参照があり、fragment.startActivityForResult()を使用していることを確認してください。結果はフラグメントのonActivityResult()に戻ります。

+0

試してみましたが動作していない、わからないのは、http://stackoverflow.com/questions/18271761/onactivityresult-gets-called-when-activity-starts-not-when-its-finishedに関連するバグです。しかし、私の断片から別のアクティビティを呼び出すと、動作します。 startActivityForResultがフラグメントのListView内で呼び出された場合にのみ、フラグメントのonActivityResultが、意図したアクティビティが開始された直後に呼び出されます。 – teapeng

+0

私はintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)を削除した後に問題を解決しました。 fragment.startActivityForResult(intent、0)を呼び出す前に。 +1してください。 – teapeng

+0

私はあなたを愛しているAdamn –

6

は、それはその子の断片に結果コードを渡します。この

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     //super.onActivityResult(requestCode, resultCode, data); 
     // Check if image is captured successfully 

     super.onActivityResult(requestCode, resultCode, data); 
     for (Fragment fragment : getSupportFragmentManager().getFragments()) { 
      fragment.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

のように主な活動方法をonActivityResultください。

関連する問題