Состояние гонки с обратным стеком фрагмента Android изменило прослушиватель?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Состояние гонки с обратным стеком фрагмента Android изменило прослушиватель?

Сообщение Anonymous »

В моей основной деятельности есть код, который выглядит следующим образом:

Код: Выделить всё

class MainActivity : AppCompatActivity() {
private val backStackListener = FragmentManager.OnBackStackChangedListener {
val backStackEntryCount = getSupportFragmentManager().backStackEntryCount

Log.e(TAG, "back stack count = " + backStackEntryCount.toString())

if (backStackEntryCount > 0) {
this.getSupportActionBar()?.setDisplayHomeAsUpEnabled(true)
this.getSupportActionBar()?.setDisplayShowHomeEnabled(true)
} else {
this.getSupportActionBar()?.setDisplayHomeAsUpEnabled(false)
this.getSupportActionBar()?.setDisplayShowHomeEnabled(false)
}
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.getItemId()){
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
return true
}
}

return super.onOptionsItemSelected(item)
}

override fun onCreate(savedInstanceState: Bundle?) {
...
getSupportFragmentManager().addOnBackStackChangedListener(backStackListener)
...
if (buttonClicked) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container_view,fragment_a).commit()
}
}
Затем во фрагменте A:

Код: Выделить всё

...
requireActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container_view,fragment_b).addToBackStack(null).commit()
Когда я перехожу в основном действии от фрагмента A -> фрагмент B, задний стек выглядит так, как и следовало ожидать, т. е. в заднем стеке есть один элемент. Если я затем нажму кнопку «Домой», элемент будет правильно извлечен из задней стопки, и мое сообщение журнала будет напечатано:

Код: Выделить всё

back stack count = 0
Однако, если я использую жест смахивания, он правильно возвращается к фрагменту A, но вместо этого я получаю:

Код: Выделить всё

back stack count = 1
Позже я убедился, что обратный стек в конечном итоге переходит в 0, но кажется, что прослушиватель изменений обратного стека вызывается до того, как фрагмент будет извлечен из стека. Это ожидаемое поведение? Есть ли способ обойти это?

Подробнее здесь: https://stackoverflow.com/questions/798 ... d-listener
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»