Aufrufen einer Fragment-Funktion aus einer Aktivität, die die Fragment-Funktion aus einem Signalrückruf aufruftJava

Java-Forum
Anonymous
 Aufrufen einer Fragment-Funktion aus einer Aktivität, die die Fragment-Funktion aus einem Signalrückruf aufruft

Post by Anonymous »

Ich habe Signalr-Rückrufe in meiner Aktivität. Wenn der Signalr-Rückruf von der Aktivität getroffen wird, möchte ich die Daten aus dem Aktivitäts-Signalr-Rückruf an ein bestimmtes Fragment senden.
Mein Aktivitäts-Signalr-Rückruf:

Code: Select all

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vm = new ViewModelProvider(this).get(InteractionsFragmentViewModel.class);
}

@Override
public void sendConnectSentClient(User jsonUser, String dateCreated, String sessionUserGuid, String userImages) {
vm.postEvent(
new InteractionEvent.SendConnectSentClient(jsonUser, dateCreated, sessionUserGuid, userImages)
);
}
Meine InteraktionenFragmentViewModel:

Code: Select all

public class InteractionsFragmentViewModel  extends ViewModel {
private final MutableLiveData events =
new MutableLiveData();

public LiveData getEvents() {
return events;
}

public void postEvent(InteractionEvent event) {
events.postValue(new Event(event));
}
}
Ereignisklasse:

Code: Select all

public class Event extends MutableLiveData {
private final T content;
private boolean handled = false;

public Event(T content) {
this.content = content;
}

public T getContentIfNotHandled() {
if (handled) return null;
handled = true;
return content;
}
}
Dann in meinem Fragment in onViewCreated:

Code: Select all

InteractionsFragmentViewModel vm = new ViewModelProvider(requireActivity())
.get(InteractionsFragmentViewModel.class);

vm.getEvents().observe(getViewLifecycleOwner(), event -> {
InteractionEvent e = event.getContentIfNotHandled();
if (e == null) return;

handleEvent(e);
});

private void handleEvent(InteractionEvent event) {
if (event instanceof InteractionEvent.SendConnectSentClient) {
InteractionEvent.SendConnectSentClient e = (InteractionEvent.SendConnectSentClient) event;
sendConnectsSentNotifications(e.user, e.dateCreated, e.userImages);
} else if (event instanceof InteractionEvent.SendConnectSentCancelClient1) {
InteractionEvent.SendConnectSentCancelClient1 e = (InteractionEvent.SendConnectSentCancelClient1) event;
sendConnectSentDeletedNotifications(e.userGuid);
} else if (event instanceof InteractionEvent.SendConnectSentCancelClient2) {
InteractionEvent.SendConnectSentCancelClient2 e = (InteractionEvent.SendConnectSentCancelClient2) event;
sendConnectSentDeletedNotifications(e.userGuid);
} else if (event instanceof InteractionEvent.SendConnectSentAcceptClient) {
InteractionEvent.SendConnectSentAcceptClient e = (InteractionEvent.SendConnectSentAcceptClient) event;
sendConnectSentDeletedNotifications(e.userGuid);
} else if (event instanceof InteractionEvent.SendConnectedSentCancelClient) {
InteractionEvent.SendConnectedSentCancelClient e = (InteractionEvent.SendConnectedSentCancelClient) event;
sendConnectSentDeletedNotifications(e.userGuid);
}
}
Aber vm.getEvents().observe(getViewLifecycleOwner(), event -> { wird nie aufgerufen, wenn das vm.postEvent in der Aktivität innerhalb des Signalr-Rückrufs getroffen wird.
Ich habe diese Methode auf ChatGPT gefunden und habe viele andere Möglichkeiten ausprobiert, aber kein Glück.
Wie kann ich meinen Signalr-Rückruf dazu bringen, eine Funktion aufzurufen und Daten an ein bestimmtes Fragment zu übergeben?
Wenn der Signalr Daten zurückgibt, möchte ich diese Daten sofort an das Fragment übergeben und diese Daten sofort zur Recyclingansicht hinzufügen.
Anstatt Fragmente zu verwenden, sollte ich etwa 11 Fragmente in meiner App haben, da Fragmente zerstört werden können>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post