wake-up-neo.com

Wie kann eine Variable von Activity an Fragment übergeben und zurückgegeben werden?

Ich mache derzeit eine Android-App und möchte ein Datum zwischen Aktivität und Fragment übergeben ... Meine Aktivität hat eine Schaltfläche, die das Fragment öffnet: DatePickerFragment.

In meiner Aktivität zeige ich ein Datum, das ich mit dem Fragment ändern möchte. Also möchte ich das Datum an den Datepicker übergeben und es an die Aktivität zurücksenden.

Ich habe viele Lösungen ausprobiert, aber keine funktionieren. Der einfache Weg würde ein Argument führen, aber dies kann nicht mit Fragmenten durchgeführt werden.

114
user1687114

Um Informationen an ein Fragment zu übergeben, setzen Sie bei der Erstellung von Arguments die Argumente, und Sie können dieses Argument später mit der Methode onCreate oder onCreateView Ihres Fragments abrufen.

In der newInstance-Funktion Ihres Fragments fügen Sie die gewünschten Argumente hinzu:

/**
 * Create a new instance of DetailsFragment, initialized to
 * show the text at 'index'.
 */
public static DetailsFragment newInstance(int index) {
    DetailsFragment f = new DetailsFragment();
    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);
    return f;
}

Im Fragment der Methode onCreate oder onCreateView können Sie die Argumente wie folgt abrufen:

Bundle args = getArguments();
int index = args.getInt("index", 0);

Wenn Sie nun von Ihrem Fragment aus mit Ihrer Aktivität kommunizieren möchten (Daten senden oder nicht), müssen Sie Schnittstellen verwenden. Wie Sie dies tun können, wird in der Dokumentation zur Kommunikation zwischen Fragmenten sehr gut erklärt. Da alle Fragmente über die Aktivität miteinander kommunizieren, können Sie in diesem Lernprogramm sehen, wie Sie Daten aus dem eigentlichen Fragment an seinen Aktivitätscontainer senden können, um diese Daten für die Aktivität zu verwenden, oder sie an ein anderes Fragment senden, das Ihre Aktivität enthält. 

Dokumentationstutorial: 

http://developer.Android.com/training/basics/fragments/communicating.html

192
jpardogo

Senden von Daten von Activity an eine Fragment

Aktivität:

Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();

Fragment:

Lesen Sie den Wert in Fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    String myValue = this.getArguments().getString("message");
    ...
    ...
    ...
}

Wenn Sie jedoch Werte von Fragment an Activity senden möchten, lesen Sie die Antwort von jpardogo. Sie benötigen Schnittstellen, weitere Informationen: Kommunikation mit anderen Fragmenten

82
Elenasys

Verwenden Sie die Bibliothek EventBus, um ein Ereignis zu übergeben, das Ihre Variable vor und zurück enthalten kann. Dies ist eine gute Lösung, da Ihre Aktivitäten und Fragmente lose miteinander verbunden sind

https://github.com/greenrobot/EventBus

7

danke an @ ρяσѕρєя K und Terry ... es hilft mir sehr und funktioniert einwandfrei 

Von Aktivität senden Sie Daten mit Absicht als:

Bundle bundle = new Bundle(); 
bundle.putString("edttext", "From Activity"); 
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

und in der OnCreateView-Methode von Fragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // get arguments
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}

referenz: Senden von Daten von Aktivität an Fragment in Android

4
mahmoud zaher

Senden von Daten aus der Aktivität in durch XML verknüpfte Fragmente

Wenn Sie ein Fragment in Android Studio mit einer der Vorlagen erstellen, z. Datei> Neu> Fragment> Fragment (Liste), dann wird das Fragment per XML verknüpft. Die newInstance-Methode wird im Fragment erstellt, wird jedoch nie aufgerufen und kann daher nicht zur Übergabe von Argumenten verwendet werden.

Überschreiben Sie stattdessen in der Aktivität die Methode onAttachFragment

@Override
public void onAttachFragment(Fragment fragment) {
    if (fragment instanceof DetailsFragment) {
        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);        
     }
}

Lesen Sie dann die Argumente in der fragment onCreate-Methode gemäß den anderen Antworten

1
Dale

Sie können Ihr Fragment einfach mit einem Bundle instanziieren:

Fragment fragment = Fragment.instantiate(this, RolesTeamsListFragment.class.getName(), bundle);
0
stef