1
+ package com.github.lzaytseva.util
2
+
3
+ import android.view.LayoutInflater
4
+ import android.view.ViewGroup
5
+ import androidx.fragment.app.Fragment
6
+ import androidx.viewbinding.ViewBinding
7
+
8
+ typealias Inflate <T > = (LayoutInflater , ViewGroup ? , Boolean ) -> T
9
+
10
+ /* *
11
+ * Базовый фрагмент, позволяет привести к единому виду все реализации фрагментов, работает в связке с BaseViewModel.
12
+ *
13
+ * При реализации потребуется реализовать абстрактные методы для инициализации вью: configureViews() и слушатели событий: subscribe()
14
+ * и абстрактное свойство viewModel
15
+ */
16
+ abstract class BaseFragment <VB : ViewBinding , VM : BaseViewModel > (
17
+ private val inflate : Inflate <VB >
18
+ ): Fragment() {
19
+
20
+ private var _binding : VB ? = null
21
+ protected val binding: VB get() = _binding !!
22
+
23
+ abstract val viewModel: VM
24
+
25
+ override fun onCreateView (
26
+ inflater : LayoutInflater ,
27
+ container : ViewGroup ? ,
28
+ savedInstanceState : android.os.Bundle ?
29
+ ): android.view.View ? {
30
+ _binding = inflate.invoke(inflater, container, false )
31
+ return binding.root
32
+ }
33
+
34
+ override fun onViewCreated (view : android.view.View , savedInstanceState : android.os.Bundle ? ) {
35
+ super .onViewCreated(view, savedInstanceState)
36
+ onConfigureViews()
37
+ onSubscribe()
38
+ }
39
+
40
+ abstract fun onConfigureViews ()
41
+
42
+ abstract fun onSubscribe ()
43
+
44
+ override fun onDestroyView () {
45
+ super .onDestroyView()
46
+ _binding = null
47
+ }
48
+ }
0 commit comments