362 Stimmen

Daten von einer Aktivität an ein Fragment in Android senden

Ich habe zwei Klassen. Die erste ist Aktivität, die zweite ist ein Fragment, in dem ich einige EditText . In activity habe ich eine Unterklasse mit async-task und in method doInBackground Ich erhalte ein Ergebnis, das ich in einer Variablen speichere. Wie kann ich diese Variable von der Unterklasse "Meine Aktivität" an dieses Fragment senden?

1voto

Muhammad Noman Punkte 1693

Sie können öffentliche statische Methode im Fragment erstellen, wo Sie statische Referenz dieses Fragments erhalten und dann Daten an diese Funktion übergeben und diese Daten als Argument in derselben Methode festlegen und Daten über getArgument auf oncreate-Methode des Fragments erhalten und diese Daten auf lokale Variablen festlegen.

1voto

devDeejay Punkte 4796

I

T

C

N

H

h

0voto

Andrew Sam Punkte 449

Die klügste und bewährteste Art, Daten zwischen Fragmenten und Aktivitäten zu übermitteln, ist die Erstellung von Variablen, Beispiel:

class StorageUtil {
  public static ArrayList<Employee> employees;
}

Die Datenübergabe vom Fragment zur Aktivität erfolgt dann in der Methode onActivityCreated:

//a field created in the sending fragment
ArrayList<Employee> employees;

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
         employees=new ArrayList();

       //java 7 and above syntax for arraylist else use employees=new ArrayList<Employee>() for java 6 and below

     //Adding first employee
        Employee employee=new Employee("1","Andrew","Sam","1984-04-10","Male","Ghanaian");
        employees.add(employee);

      //Adding second employee
       Employee employee=new Employee("1","Akuah","Morrison","1984-02-04","Female","Ghanaian");
         employees.add(employee);

        StorageUtil.employees=employees;
    }

Jetzt können Sie den Wert von StorageUtil.employees von überall her bekommen. Viel Glück!

0voto

Lampione Punkte 1612

Meine Lösung besteht darin, eine statische Methode innerhalb des Fragments zu schreiben:

public TheFragment setData(TheData data) {
    TheFragment tf = new TheFragment();
    tf.data = data;
    return tf;
}

Auf diese Weise kann ich sicher sein, dass sich alle benötigten Daten im Fragment befinden, bevor ein anderer möglicher Vorgang damit arbeiten muss. Außerdem sieht es meiner Meinung nach sauberer aus.

0voto

YASH Punkte 1

Ich habe 3 Tage lang gekämpft und keine der Lösungen hat funktioniert. Hier ist die letzte, die funktioniert hat.

Schritt 1- Erstellen Sie eine ViewModel-Klasse für die gemeinsame Nutzung von Daten zwischen der Aktivität und dem Fragment.

public class MyViewModel extends ViewModel {
private MutableLiveData<String> myData = new MutableLiveData<>();

public void setData(String data) {
    myData.setValue(data);
}

public LiveData<String> getData() {
    return myData;
}

}

Schritt 2- Erstellen Sie in der Aktivität eine Instanz des ViewModel und setzen Sie die Daten mit der Methode setData().

MyViewModel myViewModel = new 
ViewModelProvider(this).get(MyViewModel.class);
myViewModel.setData("Hello from Activity!");

Schritt 3 - Holen Sie sich im Fragment eine Instanz des ViewModel und beobachten Sie die Daten mit der Methode getData().

        MyViewModel myViewModel = new 
        ViewModelProvider(requireActivity()).get(MyViewModel.class);
        myViewModel.getData().observe(getViewLifecycleOwner(), new 
        Observer<String>() {
        @Override
        public void onChanged(@Nullable String data) {
        // update UI with the new data
          }
        });

Mit diesen Schritten wird das Fragment in der Lage sein, die von der Aktivität im ViewModel eingestellten Daten zu empfangen und zu aktualisieren. Beachten Sie, dass das ViewModel auf die Activity skaliert ist, sodass es auch dann bestehen bleibt, wenn das Fragment bei Konfigurationsänderungen zerstört und neu erstellt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X