【发布时间】:2021-02-26 10:26:54
【问题描述】:
我想知道按钮何时点击片段并更新 MainActivity。这段代码工作正常,但是当屏幕旋转由于再次调用 Activity LifeCycle OnCreate 和 viewModel.nav.observe 再次调用新值 true,但我希望它被称为 only onButton 点击。 我需要的是 onClick 值将设置为 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)
}
【问题讨论】:
标签: android kotlin android-livedata