Вызов функции фрагмента из действия, которое вызывает функцию фрагмента из обратного вызова signalrAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вызов функции фрагмента из действия, которое вызывает функцию фрагмента из обратного вызова signalr

Сообщение Anonymous »

У меня есть обратные вызовы signalr в моей активности, когда обратный вызов signalr выполняется из действия, я хочу отправить данные из обратного вызова signalr в определенный фрагмент.
Мой обратный вызов signalr:

Код: Выделить всё

@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)
);
}
Моя модель InteractionsFragmentViewModel:

Код: Выделить всё

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));
}
}
Класс события:

Код: Выделить всё

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;
}
}
Затем в моем фрагменте в onViewCreated:

Код: Выделить всё

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);
}
}
Но vm.getEvents().observe(getViewLifecycleOwner(), event -> { никогда не вызывается, когда vm.postEvent попадает в действие внутри обратного вызова signalr.
Я нашел этот метод в ChatGPT и попробовал много других способов, но безуспешно.
Как я могу заставить свой обратный вызов signalr вызвать функцию и передать данные в определенный фрагмент?
/>Я пытаюсь сделать следующее: когда сигнализатор возвращает данные, я хочу передать эти данные во фрагмент и мгновенно добавить эти данные в recycleview.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ction-from
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»