как удалить фрагмент после его загрузки с помощью навигационного компонента

#android #kotlin #android-architecture-components

Вопрос:

вот мой пример кода, который мне нужен, чтобы убить фрагмент после загрузки его в действие navHost (Основное действие), и я использую навигационный компонент, кстати, фрагмент является фрагментом заставки, поэтому, как его убить, чтобы он не отображался после загрузки нажатием кнопки «Назад».

 class SplashFragment : Fragment() {

private var _binding: FragmentSplashBinding? = null
private val binding get() = _binding!!

private lateinit var loadingAnim : AnimationDrawable

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    _binding = FragmentSplashBinding.inflate(inflater, container, false)

    lunchLogoAnimation()
    lunchLoadingAnimation()

    Handler(Looper.getMainLooper()).postDelayed({
        findNavController().navigate(R.id.action_splashFragment_to_homeFragment)

    },6000)


    return binding.root
}

private fun lunchLogoAnimation(){

    val loadAnimation = AnimationUtils.loadAnimation(activity,R.anim.splash_screen_logo_translate)
    Handler(Looper.getMainLooper()).postDelayed({
        binding.monkeyLogoSplash.visibility = View.VISIBLE
        binding.monkeyLogoSplash.startAnimation(loadAnimation)
    },500)

}

private fun lunchLoadingAnimation(){

    loadingAnim = binding.loadingDots.drawable as AnimationDrawable

    Handler(Looper.getMainLooper()).postDelayed({
        binding.loadingDots.animate().setDuration(500).alpha(1f).withEndAction {
            loadingAnim.start()
        }
    },1500)

}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}
 

Ответ №1:

Фрагмент можно легко удалить,

внутри основной деятельности-> котлин,

 supportFragmentManager.beginTransaction().remove(myFragment).commit()
 

или внутри конкретного фрагмента,

 parentFragmentManager.beginTransaction().remove(this).commit()
 

Ява

 getSupportFragmentManager().beginTransaction().remove(myFragment).commit();
 
 getParentFragmentManager.beginTransaction().remove(this).commit();
 

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

1. когда я помещаю этот parentFragmentManager.beginTransaction().удаляю(это).фиксирую() внутри области обработчика после перехода к домашнему фрагменту, он не удаляется, и когда я нажимаю кнопку «Назад», он снова загружает заставку, так что мне делать?

2. да. О, прости, я виноват. Потому что вы используете навигационные компоненты. Одним из решений может быть удаление его из компонентов навигации и запуск вручную, а затем удаление. Я действительно не знаю другого решения.

3. Это определенно сработает. Удачи!