Advertisement
Kostiggig

Navigation

Jul 6th, 2022
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.55 KB | None | 0 0
  1. interface Back {
  2.    fun back()
  3. }
  4.  
  5. interface Exit {
  6.    fun exit()
  7. }
  8.  
  9. interface Navigation : Exit {
  10.     fun navigateTo(fragment: Fragment)
  11. }
  12.  
  13.  
  14. class MainActivity : Navigation {
  15.    
  16.    
  17.     override fun navigateTo(fragment: Fragment) {
  18.         supportFragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commit()
  19.     }
  20.    
  21.  
  22.     // handle системной кнопки back
  23.     override fun onBackPressed() {
  24.         val currentFragmentInContainer = suppportFrgamentManager.fragments.first() as Back
  25.         currentFragmentInContainer.back()
  26.     }
  27.    
  28.  
  29.     // Выходим из приложения
  30.   override fun exit() = finish()
  31. }
  32.  
  33. abstract class BaseFragment() : Back {
  34.    protected val navigation by lazy {
  35.        // Получаем нашу mainActivity и кастим к Navigation,чтобы иметь доступ к методам exit() и navigateTo()
  36.         requireActivity() as Navigation
  37.    }
  38. }
  39.  
  40. class MainFragment : BaseFrgament() {
  41.  
  42.    override fun back() {
  43.        // получаем досутп к protected navigation из BaseFragment
  44.        // Если мы находися на главном фрагменте ,то по нажатии на кнопку back,мы будем выходить из приложения
  45.       navigation.exit()
  46.    }
  47. }
  48.  
  49. class MapFragment : BaseFragment() {
  50.  override fun back() {
  51.        // получаем досутп к protected navigation из BaseFragment
  52.        // Если мы находися на главном фрагменте ,то по нажатии на кнопку back,мы будем переходить на главный фрагмент                 
  53.         navigation.navigateTo(MainFragment())
  54.    }
  55. }
  56. class LoginFragment : BaseFrgament() {
  57.  
  58.    override fun back() {
  59.        // получаем досутп к protected navigation из BaseFragment
  60.        // Если мы находися на главном фрагменте ,то по нажатии на кнопку back,мы будем переходить на  фрагмент с картами             
  61.         navigation.navigateTo(MapFragment())
  62.    }
  63. }
  64.  
  65. class UserProfileFragment : BaseFragment() {
  66.     override fun back() {
  67.        // получаем досутп к protected navigation из BaseFragment
  68.        // Если мы находися на главном фрагменте ,то по нажатии на кнопку back,мы будем переходить на главный фрагмент                 
  69.         navigation.navigateTo(MainFragment())
  70.    }
  71. }
  72.  
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement