私は検索しようとしましたが、まだ少し失われています。私は通常、断片通信を、Activity
を介して、あるいはBroadcastReceiver
で行います。Android - getTargetFragmentとsetTargetFragment - 彼らは何のために使用されます
とにかく、私の質問は、getTargetFragment
の使用は何ですか?誰かがユースケースを提供することができますか?
私は検索しようとしましたが、まだ少し失われています。私は通常、断片通信を、Activity
を介して、あるいはBroadcastReceiver
で行います。Android - getTargetFragmentとsetTargetFragment - 彼らは何のために使用されます
とにかく、私の質問は、getTargetFragment
の使用は何ですか?誰かがユースケースを提供することができますか?
同じアクティビティで使用されるユースケース= 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)
これらの方法は別のフラグメントからデータにアクセスするもう1つの方法だということでした。ここには、私が書いたsample projectがあります。これは、これらのメソッドを使用するための単一のユースケースを示しています。しかし、もっと多くのユースケースがあると確信しています。
@ j2emanueあなたはどうしますか? –
私は結局、断片の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を更新しない。
http://stackoverflow.com/a/13733914/1093872ここに別の良い例があります...しかし、インターフェイスも良いです。 –
ありがとう...それはフラグメントのプレースホルダのように見えます。だから私はフラグメントと私setTargetを持っている場合、私はフラグメントを取得するためにgetTargetを使用することができます。ビューのsetTagと似ています。 – j2emanue
BroadcastReceiverではなく、LocalBroadcastManager(ここではhttp://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html)を使用するか、イベント処理の独自のメカニズムを作成することを検討してください。 –