Wie übergibt man eine Variable von einer Aktivität an ein Fragment und gibt sie wieder zurück?

Ich bin gerade dabei, eine Android-App zu erstellen, und ich 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. Ich möchte also das Datum an den Datepicker übergeben und es an die Activity zurücksenden.

Ich habe eine Menge Lösungen ausprobiert, aber keine funktioniert. Der einfache Weg wäre ein Argument übergeben, aber dies kann nicht mit Fragmenten getan werden.

Um Informationen an ein Fragment zu übergeben, setzen Sie beim Erstellen des Fragments die Argumente, die Sie später mit der Methode onCreate oder onCreateView Ihres Fragments abrufen können.

In der newInstance-Funktion Ihres Fragments fügen Sie die Argumente hinzu, die Sie an das Fragment senden möchten:

/**
 * 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;
}

Dann innerhalb des Fragments in 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 mit Ihrer Aktivität kommunizieren wollen (Daten senden oder nicht), müssen Sie Schnittstellen verwenden. Die Art und Weise, wie man dies tun kann, wird in der Dokumentation Tutorial der Kommunikation zwischen Fragmenten sehr gut erklärt. Da alle Fragmente untereinander über die Aktivität kommunizieren, können Sie in diesem Tutorial sehen, wie Sie Daten vom aktuellen Fragment an seinen Aktivitätscontainer senden können, um diese Daten in der Aktivität zu verwenden oder sie an ein anderes Fragment zu senden, das Ihre Aktivität enthält.

Dokumentation Tutorial:

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

Kommentare (7)

Senden von Daten von Activity zu einem 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 des Wertes im Fragment

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

Aber wenn Sie Werte von Fragment zu Activity senden wollen, lesen Sie die Antwort von jpardogo, müssen Sie Schnittstellen benötigen, mehr Info: Kommunikation mit anderen Fragmenten

Kommentare (3)

Verwenden Sie die Bibliothek EventBus, um Ereignisse, die Ihre Variable enthalten könnten, hin und her zu schicken. Es ist eine gute Lösung, weil es Ihre Aktivitäten und Fragmente lose gekoppelt hält.

https://github.com/greenrobot/EventBus

Kommentare (1)