Stellen Sie sich vor, ich habe FragmentA von dem ich startDialogFragment (es gibt EditText
im Kasten). Wie kann ich den Wert von EditText
zu FragmentA zurückbekommen? Ich versuche etwas wie this und this zu machen, aber ich war nicht erfolgreich.Wie erhalte ich Daten von DialogFragment zu einem Fragment?
Antwort
Die Fragment.onActivityResult()
Methode ist in dieser Situation nützlich. Es dauert getTargetRequestCode()
, das ist ein Code, den Sie zwischen Fragmenten einrichten, damit sie identifiziert werden können. Darüber hinaus ist es ein Anforderungscode nimmt, in der Regel nur 0
, wenn der Code gut funktioniert, und dann eine Intent
, die Sie auch einen String anhängen können, wie so
Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Auch sollte die setTargetFragment(Fragment, requestCode)
im Fragment verwendet werden dass das Ergebnis gesendet wird, um es zu identifizieren. Insgesamt würden Sie Code in dem anfordernden Fragmente haben, die wie folgt aussieht:
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
Die Klasse zum Senden von Daten (das DialogFragment) verwenden würde dieses Fragment wir gerade definiert zu senden, um die Daten:
private void sendResult(int REQUEST_CODE) {
Intent intent = new Intent();
intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
getTargetFragment().onActivityResult(
getTargetRequestCode(), REQUEST_CODE, intent);
}
Um die Daten zu erhalten, verwenden wir diese Art von Klasse in dem Fragment, das zunächst die DialogFragment gestartet:
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);
an dieser Stelle haben Sie die Zeichenfolge aus Ihrem EditText
aus der DialogFragment
im Elternfragment. Verwenden Sie einfach die sendResult(int)
Methode in Ihrer anonymen Klasse TextChangeListener()
, so dass der Text gesendet wird, wenn Sie es brauchen.
Vielen Dank, es ist sehr nützlich –
Sehr gut explenation. Du hast meinen Tag gerettet. Danke vielmals! – Kristopher
Hallo und vielen Dank für diese Lösung ... Können Sie mir bitte helfen? Warum kann meine onActivityResult() -Methode das Ergebnis meines Dialogfragments nicht erfassen? Wenn ich den gleichen Code habe ... Danke im Voraus! –
Sie müssen die Daten aus dem Dialog über eine Callback-Methode zurück an die Aktivität senden und dann die Aktivität an das Fragment zurückgeben, an das sie gesendet werden soll. Nur ein kleines Beispiel:
public void datFromDialog(String data){
MyFragment mf = (MyFragment)getFragmentManager().findFragmentById(r.id.frag);
mf.iWantNewData(data);
}
Bitte, können Sie es mehr erklären oder mehr vollständige Beispiel –
hier http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – tyczj
Ich brauche die die Kommunikation mit Fragment stattdessen Aktivität –
Was möchten Sie nach Android Developers ...
eine Situation an, dass Sie eine Datei an den Server hochladen, auf Klicken der Upload-Button sollte ein Dialog geöffnet, woraufhin für Titel und optional tag.And der Dialog selbst mit 2 Tasten sagen Abbrechen und weiter.
Erstellen Sie die Benutzeroberfläche wie gewünscht mit der Layout-XML-Datei.
dann erstellen Sie eine Klasse, die DialogFragment erweitert. pumpen Sie das Layout auf und initialisieren Sie Ansichten in der onCreateView() - Methode.
Innerhalb dieser Klasse schaffen eine Schnittstelle
public interface uploadDialogInterface
{
public void senddata(String title, String tag);
}
uploadDialogInterface interfaceObj;
String title="";
String tag=" ";
Und das Wichtigste ist, Sie onAttach außer Kraft setzen müssen() -Methode
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
interfaceObj= (uploadDialogInterface) getTargetFragment();
}
und in der auf Schaltfläche, um die Interface-Methode wie
nennen @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();
}
}
}
und im Innern des Fragments oder Aktivität, von dem Sie den Dialog starten sollten enthält das SetTargetFragment-Attribut.
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);
}
Und schließlich sollten Sie die Schnittstelle implementieren (das innerhalb des Dialogfragment deklariert wurde) und überschreiben die Methode
@Override
public void senddata(String title,String optionaltag) {
this.videoTitle=title;
this.optionalTag=optionaltag;
}
Ich denke, dieser Beitrag wird hilfreich sein für diejenigen, die für das Dialogfragment verwenden erstes Mal . Ich hatte Mühe, die Lösung zu finden. Und hoffentlich wird dies das Problem von jemandem in der Zukunft lösen. (Entschuldigung für die Sprache)
- 1. Wie kann ich Daten von DialogFragment an DialogFragment senden?
- 2. Update-Fragment von Dialogfragment
- 3. wie zwischen Fragment und dialogFragment
- 4. Aufruf von DialogFragment aus Fragment
- 5. DialogFragment von einem anderen DialogFragment anzeigen
- 6. Wie füge ich einen EditText zu einem DialogFragment hinzu?
- 7. Wie programmiere ich dieses Fragment programmatisch zu meinem Fragment?
- 8. senden Daten von einem Fragment in Listenansicht in einem anderen Fragment zu zeigen
- 9. Adapter in einem Fragment nach DialogFragment aktualisieren dbflow einfügen
- 10. Wert von DialogFragment zu Fragment ist die Anzeige nicht
- 11. getActivity() gebe null zurück, nachdem ich von einem dialogFragment
- 12. Wie erhalte ich das Datum von einem DialogFragment zurück in die Containeraktivität?
- 13. Rückgabe von Daten von einem DialogFragment an einen Adapter
- 14. Android: Pass Daten (Extras) zu einem Fragment
- 15. Wie erhalte ich Daten von der Sendeabsicht?
- 16. Wie implementiert man Listener von Fragment A zu Fragment B?
- 17. Android Fragment zeigt als dialogfragment oder gewöhnliches Fragment
- 18. Wie öffne ich ein neues Fragment von einem anderen Fragment
- 19. Wie erhebe ich ein DialogFragment über einem anderen?
- 20. Navigieren von einem Fragment zu einem anderen Fragment auf Knopfdruck
- 21. Daten zwischen einer Aktivität zu Dialogfragment übergeben
- 22. Fragment aktualisieren, wenn das Dialogfragment beendet wird
- 23. Wie füge ich Animation zu DialogFragment hinzu?
- 24. Hinzufügen Fragment zu einem anderen Fragment
- 25. Wie in einem Fragment zu analysieren?
- 26. Wie setze ich Text aus einem DialogFragment mit DatePickerDialog
- 27. Griff Tastenklicks in einem DialogFragment
- 28. Statusbarfarbe von DialogFragment setzen
- 29. Wie Bundle verwenden, um Daten von Adapter zu einem Fragment in Viewpager zu teilen
- 30. DialogFragment löst ClassCastException aus, wenn sie von Fragment
http://stackoverflow.com/questions/17966605/fragments-how-to-start-dialog-from-fragment/17968000#17968000. Hier gibt der boolesche Wert stattdessen den Edittext-Wert zurück. Oder benutze eine Schnittstelle. – Raghunandan
Ich werde es versuchen)) Vielen Dank –