Отключить несколько экземпляров фрагмента

#android

#Android

Вопрос:

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

 class AppActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_app)

    SharedPreferenceHelper.init(this)
    GRPCClient.init(this)
    DataBaseHelper.init(this)

    imageViewDot.setOnClickListener {
        findNavController(this, R.id.navHostFragmentApp).navigate(R.id.syncFragment) 
    }
}}
 

Как я могу предотвратить это. Что мне нужно сделать, так это то, что если фрагмент виден, кнопка ничего не сделает.

Комментарии:

1. github.com/sunil-singh-chaudhary/…

Ответ №1:

попробуйте отметить, что вы уже добавили этот фрагмент, и не делайте этого снова

 class AppActivity : AppCompatActivity() {

var navigated: Boolean = false

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_app)

    SharedPreferenceHelper.init(this)
    GRPCClient.init(this)
    DataBaseHelper.init(this)

    imageViewDot.setOnClickListener {
        if(navigated) return
        findNavController(this, R.id.navHostFragmentApp).navigate(R.id.syncFragment)
        navigated = true
    }
}
    override fun onBackPressed() {
        super.onBackPressed() // removes from back stack if present in there
        navigated = false
    }
}
 

или вы можете использовать getBackStackEntry или getCurrentBackStackEntry из NavController экземпляра, чтобы проверить, что это Fragment уже на позиции