Skip to content

gzeinnumer/SharedViewModelFragmentkt

Repository files navigation

SharedViewModelFragment

pengganti bundle

def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
  • SharedVM.kt
class SharedVM : ViewModel(){

    val selected = MutableLiveData<String>()

    fun select(s: String) {
        selected.value = s
    }

}
  • MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        initFragment()
    }

    private fun initFragment() {
        val fragmentManager = supportFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()
        val fragment: Fragment = SecondFragment()
        fragmentTransaction.replace(R.id.fr_2, fragment)
        fragmentTransaction.addToBackStack(null)
        fragmentTransaction.commit()
    }
}
  • FirstFragment.kt
class FirstFragment : Fragment() {

    lateinit var model: SharedVM
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        model = ViewModelProvider(activity!!)[SharedVM::class.java]
    }

    private lateinit var binding: FragmentFirstBinding
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentFirstBinding.inflate(inflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btnFr1.setOnClickListener { v -> model.select(binding.tvFr1.text.toString()) }
    }
}
  • SecondFragment.kt
class SecondFragment : Fragment() {

    lateinit var binding: FragmentSecondBinding
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentSecondBinding.inflate(inflater)
        return binding.root
    }

    private lateinit var model: SharedVM
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        model = activity?.run {
            ViewModelProvider(activity!!)[SharedVM::class.java]
        } ?: throw Exception("Invalid Activity")
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        model.selected.observe(this, Observer { s ->
            binding.tvFr2.text = s
        })

    }
}

Copyright 2020 M. Fadli Zein

About

pengganti bundle

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages