Вызов фрагмента OnViewCreated после PopBackStackAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вызов фрагмента OnViewCreated после PopBackStack

Сообщение Anonymous »

У меня есть 1 действие с 3 фрагментами. (А, Б и С). Итак,
Activity -> FragmentContainerView с фрагментом A Фрагмент A имеет кнопку для перехода к фрагменту B
Фрагмент A -> Фрагмент B (с addToBackStack)
Затем я перехожу от фрагмента B к фрагменту C
Фрагмент B -> Фрагмент C (без addToBackStack)
Мне нужно, когда я сохраните элемент во фрагменте C, вернитесь к фрагменту A, поэтому я не использую addToBackStack.
Проблема в том, что во фрагменте C я использую

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

requireActivity().supportFragmentManager.popBackStack()
или

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

requireActivity().onBackPressed()
Фрагмент A появляется, но вызывается метод OnViewCreated во фрагменте C, поэтому выполните проверки, которые у меня есть в этом фрагменте C.
Мне нужно из Фрагмент C возвращается к фрагменту A без вызова OnViewCreated фрагмента C
Интересный код
MainActivity

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

fun changeFragment(fragment: Fragment, addToBackStack: Boolean) {
val transaction = supportFragmentManager.beginTransaction()
.replace(R.id.host_fragment, fragment,fragment::class.java.simpleName)
if (addToBackStack) transaction.addToBackStack(null)
transaction.commit()
}
Фрагмент A (ListProductsFragment)

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

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupRecyclerView()
observeLoading()
observeProducts()
viewModel.fetchProducts()
viewBinding.btnEmptyProducts.setOnClickListener { viewModel.fetchProducts() }
viewBinding.fabAddPurchase.setOnClickListener { addPurchase() }
}

private fun addPurchase() {
(requireActivity() as MainActivity).changeFragment(ScanFragment.newInstance(),true)
}
Фрагмент Б (ScanFragment)

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

    override fun barcodeDetected(barcode: String) {
if (processingBarcode.compareAndSet(false, true)) {
(requireActivity() as MainActivity).changeFragment(PurchaseFragment.newInstance(barcode), false)
}
}
Фрагмент C (PurchaseFragment)

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

    private fun observePurchaseState() {
viewModel.purchasesSaveState.observe(viewLifecycleOwner, { purchaseState ->
when (purchaseState) {
is PurchaseSaveState.Error -> TODO()
is PurchaseSaveState.Loading -> manageProgress(purchaseState.isLoading)
PurchaseSaveState.Success -> {
Toast.makeText(requireActivity(), getString(R.string.purchase_saved_successfully), Toast.LENGTH_SHORT).show()
requireActivity().supportFragmentManager.popBackStack()
}
}
})
}
Полный код находится здесь https://github.com/gersard/PurchaseTracking

Подробнее здесь: https://stackoverflow.com/questions/669 ... pbackstack
Ответить

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

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

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

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

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