#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. Это определенно сработает. Удачи!