2013-09-01 11 views
23

私は検索しようとしましたが、まだ少し失われています。私は通常、断片通信を、Activityを介して、あるいはBroadcastReceiverで行います。Android - getTargetFragmentとsetTargetFragment - 彼らは何のために使用されます

とにかく、私の質問は、getTargetFragmentの使用は何ですか?誰かがユースケースを提供することができますか?

+1

http://stackoverflow.com/a/13733914/1093872ここに別の良い例があります...しかし、インターフェイスも良いです。 –

+0

ありがとう...それはフラグメントのプレースホルダのように見えます。だから私はフラグメントと私setTargetを持っている場合、私はフラグメントを取得するためにgetTargetを使用することができます。ビューのsetTagと似ています。 – j2emanue

+1

BroadcastReceiverではなく、LocalBroadcastManager(ここではhttp://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html)を使用するか、イベント処理の独自のメカニズムを作成することを検討してください。 –

答えて

27

同じアクティビティで使用されるユースケース= 2個のフラグメント。

startActivityForResult()は、2つのアクティビティ間の関係を確立します。setTargetFragment()は、2つのフラグメント間の呼び出し元/呼び出し関係を定義します。

setTargetFragment(target) "called"フラグメントに結果の送信先を指定させることができます。この場合、onActivityResult()が手動で呼び出されます。

public class Caller extends Fragment 
    Fragment called = Called.newInstance() 
    called.setTargetFragment(this) 

public class Called extends DialogFragment 
    intent = amazingData 
    getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent) 
4

これらの方法は別のフラグメントからデータにアクセスするもう1つの方法だということでした。ここには、私が書いたsample projectがあります。これは、これらのメソッドを使用するための単一のユースケースを示しています。しかし、もっと多くのユースケースがあると確信しています。

+0

@ j2emanueあなたはどうしますか? –

4

私は結局、断片のsetTargetの使い方を見つけ出し、共有したいと考えました。あなたが断片から断片に通信したいときに非常に便利です。

ここに例があります:ダイアログを表示したかったとしたら、何かアクションをしたいと思っています。あなたがこれを行うことがダイアログを使用しますあなたのfragment1でとても

myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE); 

、あなたはこのようonActivityResultsをオーバーライドする必要がありますダイアログと呼ばれるあなたのフラグメントで

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == CoDDialogFragment.REQ_CODE) 
      exit(); //or whatever you want to do here 
    } 

をし、 myDialogFragmentでこれを行うことができます:

TellTargetYouGotResults(REQ_CODE); 

//... 
    private void TellTargetYouGotResults(int code) { 
     Fragment targetFragment = getTargetFragment(); // fragment1 in our case 
     if (targetFragment != null) { 
      targetFragment.onActivityResult(getTargetRequestCode(), code, null); 
     } 
    } 

ここでREQ_CO DEはもちろんどんなintでもかまいません。断片から断片への通信に非常に役立ちます。しかし、私はまだイベントバスを好む場合があります。ターゲットにデータを送信した後に、そのビューが既に破棄されている可能性があります(そのフラグメントを入れてください)。次にonActivityResultのビューを更新しようとするとクラッシュします。だから私は、単にデータを渡すのに便利だと言っているが、あなたが(ビューを破棄して状態を保持する)置換ではなく、 '追加'フラグメントトランザクションをしない限り、UIを更新しない。

関連する問題