ho finalmente scoperto come utilizzare setTarget in un frammento e volevo condividere. è abbastanza utile quando si desidera comunicare da un frammento all'altro.
Ecco un esempio: diciamo che volevi mostrare una finestra di dialogo e quando si chiude vuoi fare qualche azione.
Quindi nel tuo fragment1 che utilizzerà la finestra di dialogo che si potrebbe fare questo:
myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);
e nel frammento che ha chiamato la finestra di dialogo si avrebbe bisogno di sovrascrivere onActivityResults in questo modo:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CoDDialogFragment.REQ_CODE)
exit(); //or whatever you want to do here
}
e nel myDialogFragment si potrebbe fare ciò:
TellTargetYouGotResults(REQ_CODE);
//...
private void TellTargetYouGotResults(int code) {
Fragment targetFragment = getTargetFragment(); // fragment1 in our case
if (targetFragment != null) {
targetFragment.onActivityResult(getTargetRequestCode(), code, null);
}
}
dove REQ_CO DE può essere qualsiasi int, ovviamente. Molto utile per la comunicazione tra frammenti e frammenti. ma preferisco comunque il bus degli eventi come a volte dopo aver inviato i dati a un target la cui vista potrebbe essere già stata distrutta (nel caso si tratti di un frammento) e quindi se si tenta di aggiornare la vista in onActivityResult si verificherà un arresto anomalo. quindi direi che è utile solo per passare i dati, ma non aggiornare l'interfaccia utente a meno che tu non abbia fatto una transazione frammento 'add' e non una sostituzione (che distrugge la vista ma mantiene lo stato).
http://stackoverflow.com/a/13733914/1093872 ecco un altro buon esempio ... ma anche le interfacce sono buone. –
Grazie ... sembra solo un segnaposto per un frammento. quindi se ho un frammento e setTarget posso usare getTarget per recuperare il frammento. È simile a setTag sulle viste. – j2emanue
Invece di BroadcastReceiver, è consigliabile utilizzare LocalBroadcastManager (qui: http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html) o creare il proprio meccanismo di gestione degli eventi. –