I'm building a RecyclerView
in an Android app and I inflate its items asynchronously (I inflate a Framelayout
synchronously and right after I call the asynchronous inflation of the "real" view). The RecyclerView
could call onBindViewHolder
before that asynchronous inflation has finished to execute.
So the behaviour I want is the following: Function A
gets called once. If function B
has been executed, A
starts to execute. But if function B
has not been executed yet, then A
will start its execution right after B
finished to execute.
Things to consider: There is a callback when B
finishes to execute and it happens on the same thread where A
gets called. Both A
and B
are methods of the object x
let's say.
Some ideas on how I can achieve what I want?
CodePudding user response:
Using coroutines:
val bHasBeenCalled = Job()
fun a() {
scope.launch {
bHasBeenCalled.join()
doA()
}
}
fun b() {
doB()
bHasBeenCalled.complete()
}