Immagina, ho FragmentA da cui I startDialogFragment (ci sono EditText
nella casella). Come posso recuperare il valore da EditText
a FragmentA? Provo a fare qualcosa come this e this ma non ho avuto successo.Come ottenere dati da DialogFragment a un frammento?
risposta
Il metodo Fragment.onActivityResult()
è utile in questa situazione. Ci vuole getTargetRequestCode()
, che è un codice che hai impostato tra i frammenti in modo che possano essere identificati. Inoltre, ci vuole un codice di richiesta, normalmente solo 0
se il codice ha funzionato bene, e poi un Intent
, che è possibile allegare una stringa troppo, in questo modo
Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Inoltre, il setTargetFragment(Fragment, requestCode)
dovrebbe essere utilizzato nel frammento che il risultato è stato inviato da per identificarlo. In generale, si dovrebbe avere il codice nel frammento chiedendo che assomiglia a questo:
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
La classe di inviare i dati (l'DialogFragment) userebbe questo frammento che abbiamo appena definito per inviare i dati:
private void sendResult(int REQUEST_CODE) {
Intent intent = new Intent();
intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
getTargetFragment().onActivityResult(
getTargetRequestCode(), REQUEST_CODE, intent);
}
per ricevere i dati, usiamo questo tipo di classe nel frammento che inizialmente ha iniziato la DialogFragment:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Make sure fragment codes match up
if (requestCode == DialogFragment.REQUEST_CODE) {
String editTextString = data.getStringExtra(
DialogFragment.EDIT_TEXT_BUNDLE_KEY);
a questo punto, si ha la stringa dal vostro EditText
da DialogFragment
nel frammento principale. Basta usare il metodo nella classe anonima TextChangeListener()
in modo che il testo venga inviato quando ne hai bisogno.
Grazie, è molto utile –
Ottima spiegazione. Mi hai salvato la giornata. Molte grazie! – Kristopher
Ciao e grazie per questa soluzione ... puoi aiutarmi per favore? Perché il mio metodo onActivityResult() non può acquisire i risultati dal mio frammento di finestra di dialogo? Quando ho lo stesso codice ... Grazie in anticipo! –
È necessario inviare i dati dalla finestra di dialogo all'attività tramite un metodo di richiamata, quindi fare in modo che l'attività restituisca i dati al frammento in cui si desidera accedere. Un breve esempio:
public void datFromDialog(String data){
MyFragment mf = (MyFragment)getFragmentManager().findFragmentById(r.id.frag);
mf.iWantNewData(data);
}
Per favore, puoi spiegarlo di più o ottenere più pieno di esemplificazioni –
guarda qui http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – tyczj
ho bisogno del Comunicando con il frammento invece l'attività –
Quello che vuoi, in base alle Android Developers ...
Si supponga una situazione che si sta caricando un po 'di file al server, il ticchettio delle pulsante Carica una finestra di dialogo dovrebbe aprire, spingendo per il titolo e tag.And opzionale finestra stesso contenente 2 pulsanti dire Annulla e continua.
rendere l'interfaccia utente come si desidera utilizzando il file di layout xml.
quindi creare una classe che estende DialogFragment. gonfia il layout e inizializza le viste all'interno del metodo onCreateView().
Dentro quella classe creare un'interfaccia
public interface uploadDialogInterface
{
public void senddata(String title, String tag);
}
uploadDialogInterface interfaceObj;
String title="";
String tag=" ";
E la cosa importante è che è necessario eseguire l'override onAttach metodo()
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
interfaceObj= (uploadDialogInterface) getTargetFragment();
}
E nel sul pulsante clicca chiamare il metodo di interfaccia come
@Override
public void onClick(View v) {
int id=v.getId();
if(id== R.id.vB_fud_cancel)
{
dismiss();
}
else if(id== R.id.vB_fud_upload)
{
title=mVideotitle.getText().toString();
tag=mOptionaltag.getText().toString();
if(mVideotitle.getText().toString().isEmpty()) {
Snackbar.make(mVideotitle,"Please enter the video title", Snackbar.LENGTH_SHORT).show();
}else
{
interfaceObj.senddata(title,tag);
dismiss();
}
}
}
E all'interno del frammento o dell'attività da cui si avvia la finestra di dialogo dovrebbe contiene l'attributo setTargetFragment.
private void callUploadDialog()
{
UploadDialogFragment fragment = new UploadDialogFragment();
fragment.setTargetFragment(this, 0);
FragmentManager manager = getFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_in);
fragment.show(ft, "UploadDialogFragment");
fragment.setCancelable(false);
}
E infine è necessario implementare l'interfaccia (che è stata dichiarata all'interno del frammento di dialogo) e l'override del metodo
@Override
public void senddata(String title,String optionaltag) {
this.videoTitle=title;
this.optionalTag=optionaltag;
}
penso che questo post sarà utile per coloro che utilizzano finestra frammento per la prima volta . Ero faticato a trovare la soluzione. E speriamo che questo risolva il problema di qualcuno in futuro. (Scusate la lingua)
- 1. DialogFragment genera ClassCastException se chiamato da Frammento
- 2. Restituzione di dati da un DialogFragment a un adattatore
- 3. Come inviare dati da un frammento ad un altro frammento?
- 4. Come visualizzare un DialogFragment da un gestore
- 5. Come passare il pacchetto da un frammento a un frammento
- 6. Come passare i dati da un frammento a una finestra di dialogo Frammento
- 7. Chiamata registerReceiver da un DialogFragment
- 8. Aggiorna frammento quando dialogfragment viene eliminato
- 9. Come ottenere l'istanza del frammento da FragmentActivity?
- 10. Passaggio da frammento mappa a un altro Frammento e ritorno
- 11. Il frammento di Android viene visualizzato come dialogfragment o frammento normale
- 12. Invio di dati da frammenti nidificati a frammento padre
- 13. getActivity() restituisce null dopo il ritorno da un dialogFragment
- 14. Come ottenere dati audio da un MP3?
- 15. Impossibile rendere trasparente il DialogFragment personalizzato sul frammento
- 16. come ottenere i dati da un URL
- 17. Aggiunta di un frammento a una finestra di dialogo
- 18. Come rendere DialogFragment modale?
- 19. Come ottenere dati da ajax.done()?
- 20. passare argomento a DialogFragment
- 21. Come ottenere dati da PeopleSoft
- 22. ActionBar in a DialogFragment
- 23. Aggiunta di un pacchetto a un frammento da un FragmentActivity
- 24. Come si aggiunge un EditText a un DialogFragment?
- 25. Come chiudere correttamente un DialogFragment?
- 26. Ottenere un riferimento a un figlio Frammento dopo il genitore Frammento è stato ricreato
- 27. Come inviare dati da un'attività al suo frammento principale?
- 28. come rimuovere il titolo da DialogFragment?
- 29. Recupera contesto da un frammento
- 30. Frammento di chiamata da frammento
http://stackoverflow.com/questions/17966605/fragments-how-to-start-dialog-from-fragment/17968000#17968000. in questo caso il valore booleano restituito restituisce il valore di edittext. O usare un'interfaccia. – Raghunandan
lo proverò)) Grazie mille –