I wish to know when button clicks on fragment and update MainActivity. This code works fine, but when screen rotated due to Activity LifeCycle OnCreate called again and viewModel.nav.observe called again with new value true, but I wish it to be called only onButton click. What I need is onClick the value will be set to true and then false, so I only know when button clicked and not on screen rotate. Or some other way to know the button is clicked in the fragment.
How Can I achieve this?
Fragment
class Fragment1 : Fragment() {
companion object {
fun newInstance() = Fragment1()
}
private lateinit var viewModel: SharedViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_1, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
buttonNextF1.setOnClickListener {
viewModel.nav.value = true
}
}
}
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val viewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
var fragment1 = Fragment1.newInstance()
navigateToFragment(fragment1)
viewModel.nav.observe(this, {
Log.d("DTAG", "Status: $it")
})
}
private fun navigateToFragment(fragment: Fragment) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.addToBackStack(null)
fragmentTransaction.replace(R.id.mainFrame, fragment)
fragmentTransaction.commit()
}
}
ViewModel
class SharedViewModel : ViewModel() {
var nav = MutableLiveData(false)
}