W końcu dowiedziałem się, jak używać setTarget w fragmencie i chciałbym się nim dzielić. jest to bardzo przydatne, gdy chcesz komunikować się z fragmentu do fragmentu.
Oto przykład: powiedzmy, że chcesz wyświetlić okno dialogowe, a kiedy zostanie zamknięte, chcesz wykonać pewne działanie.
więc w fragment1 że użyje okno można to zrobić:
myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);
iw swoim fragmencie, który wywołał dialog, czego potrzeba, aby zastąpić onActivityResults tak:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CoDDialogFragment.REQ_CODE)
exit(); //or whatever you want to do here
}
i w myDialogFragment można to zrobić:
TellTargetYouGotResults(REQ_CODE);
//...
private void TellTargetYouGotResults(int code) {
Fragment targetFragment = getTargetFragment(); // fragment1 in our case
if (targetFragment != null) {
targetFragment.onActivityResult(getTargetRequestCode(), code, null);
}
}
gdzie REQ_CO DE może być dowolną int oczywiście. Bardzo przydatne do komunikacji między fragmentami. ale nadal wolę magistralę zdarzeń, ponieważ czasami po wysłaniu danych do celu jego widok mógł już zostać zniszczony (po prostu fragment), a jeśli spróbujesz zaktualizować widok w trybie onActivityResult, dostaniesz awarię. więc powiedziałbym, że warto przesyłać dane wzdłuż, ale nie aktualizować interfejsu użytkownika, chyba że dokonano "fragmentu" transakcji fragmentu, a nie wymiany (która niszczy widok, ale zachowuje stan).
http://stackoverflow.com/a/13733914/1096668 tutaj jest inny dobry przykład ... ale interfejsy są również dobre. –
Dzięki ... wygląda jak zwykły uchwyt na fragment. więc jeśli mam fragment i i setTarget, to mogę użyć getTarget do pobrania fragmentu. Jest podobny do setTag w widokach. – j2emanue
Zamiast BroadcastReceiver, rozważ użycie LocalBroadcastManager (tutaj: http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html) lub utwórz własny mechanizm obsługi zdarzeń. –