Как узнать, когда был вызван `navController.popBackStack ()`? - PullRequest
0 голосов
/ 05 августа 2020

Я вставляю backstack на своем навигационном контроллере в какой-то момент своего кода -

  navController.popBackStack()

Фрагмент, который добавил этот следующий фрагмент в backstack, должен точно знать, когда он был вытянут, чтобы код триггера, следующий за этим.

Как мне сообщить об этом первому фрагменту?

Я думал о добавлении обратного вызова в качестве аргумента, но сомневаюсь, что это хорошая практика.

1 Ответ

1 голос
/ 06 августа 2020

Если вы используете Koin , вы можете сделать что-то вроде:

class MyActivity : AppCompatActivity(){

// Lazy inject MyViewModel
val model : MySharedViewModelby sharedViewModel()

override fun onCreate() {
    super.onCreate()

model.isFragmentPopped.observe(this, Observe{
    if(it){
            doSomething()
          }
    }    
}
}

Fragment:

class MyFragment : Fragment(){

// Lazy inject MyViewModel
val model : MySharedViewModel by sharedViewModel()

override fun onCreate() {
    super.onCreate()

    var fragmentX = model.isFragmentXPopped
}

fun backstackPopped{
    model.fragmentPopped()
    navController.popBackStack()
}
}

ViewModel:

var _isFragmentPopped = MutableLiveData<Boolean>(false)
val isFragmentPopped : LiveData<Boolean>
get = _isFragmentPopped

fun fragmentPopped(){
    _isFragmentPopped.value = true
}

Имейте в виду, что вы должны делать sharedViewModels как можно меньше, поскольку они не будут уничтожены, пока не будет уничтожена активность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...