terrakok/Cicerone

Result listener's lambda not always calling

RMLdev opened this issue · 2 comments

Hello.
I tried to use result listener in my mvp project. Unfortunately, lambda expression, when I listen resullt, is calling from time to time, unpredictable.

Structure:

TabNavigationFragment-AnotherFragment with ViewPager - FragmentA in ViewPager - FragmentB calling from FragmentA with router

In FragmentA, after user selected some images from gallery, I'm calling in onActivityResult:

presenter.showImagePreview(imagesUriList: List<Uri>)

And in presenterA:

 fun showFragmentB(imagesUriList:  List<Uri>) {
  cicerone.router.setResultListener("key") { reviewedImagesUriList ->
            reviewedImagesUriList as List<Uri>
            selectedImagesUriList.addAll(reviewedImagesUriList )
            viewState.showSelectedImages(selectedImagesUriList)
        }
        
 cicerone.router.navigateTo(Screens.fragmentB(imagesUriList), false)
 }

When user done in FragmentB I'm calling

presenter.saveImages(revievedUriList)

And in presenterB:

fun saveImages(revievedUriList: List<Uri>) {
    ciceron.router.sendResult("key", revievedUriList)
    ciceron.router.exit()
}

And, as I said earlier, lambda in FragmentA, which after "cicerone.router.setResultListener("key")", may be called, may be not

What did i do wrong? How to fix it?

This is a burning question

I think reason is your app has died when you opened external gallery or camera activity (android can do it).
After restoring process result listeners were cleaned and you see this behaviour.

For right handling app death you have to use shared model with results and post data to them from presenterB and grab it from presenterA