Я считаю, что для связи между Фрагментами через Activity есть путь к go, поэтому вы находитесь на правильном пути.
Одна вещь, которую вы могли бы сделать, это использовать класс SingleLiveData, который по сути как LiveData, но после того, как его значение установлено, оно обнуляется, поэтому его получает только первый наблюдатель:
class SingleLiveData<T> : MutableLiveData<T>() {
private val mPending = AtomicBoolean(false)
@MainThread
override fun observe(owner: LifecycleOwner, observer: Observer<T>) {
if (hasActiveObservers()) {
Log.w(TAG, "Multiple observers registered but only one will be notified of changes.")
}
// Observe the internal MutableLiveData
super.observe(owner, Observer { t ->
if (mPending.compareAndSet(true, false)) {
observer.onChanged(t)
}
})
}
@MainThread
override fun setValue(t: T?) {
mPending.set(true)
super.setValue(t)
}
/**
* Used for cases where T is Void, to make calls cleaner.
*/
@MainThread
fun call() {
value = null
}
companion object {
private val TAG = "SingleLiveData"
}
}
Затем вы можете просто позвонить: singleLiveData.call()
для «установки и уничтожения» и, таким образом, забыть значение после первого использования! Класс получен (и используется в моих проектах в течение многих лет) из: { ссылка }