我希望在片段上点击按钮并更新MainActivity。这段代码运行良好,但由于Activity生命周期OnCreate被再次调用,并且viewModel.nav.observe又被调用了一个新值true,而我只希望它在仅有时调用。
我需要的是,在单击事件触发后值将设置为true,然后设置为false,这样我才能确定是否点击了按钮,而不是在屏幕旋转时被触发。
或者还有其他方法在片段中确定按钮已被点击。
如何实现这个功能?
片段
我需要的是,在单击事件触发后值将设置为true,然后设置为false,这样我才能确定是否点击了按钮,而不是在屏幕旋转时被触发。
或者还有其他方法在片段中确定按钮已被点击。
如何实现这个功能?
片段
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
}
}
}
主活动
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()
}
}
视图模型
class SharedViewModel : ViewModel() {
var nav = MutableLiveData(false)
}