Android 正在从活动更新片段内的值
我希望将我的旧应用程序转移到MVVM,请您帮助我进行此测试: 共享视图模型:Android 正在从活动更新片段内的值,android,mvvm,observable,android-viewmodel,Android,Mvvm,Observable,Android Viewmodel,我希望将我的旧应用程序转移到MVVM,请您帮助我进行此测试: 共享视图模型: class SharedViewModel : ViewModel() { private var _numberF1 = MutableLiveData<Int>().apply { postValue(0)} val numberF1: LiveData<Int> get() = _numberF1 fun addNumberF1() {
class SharedViewModel : ViewModel() {
private var _numberF1 = MutableLiveData<Int>().apply { postValue(0)}
val numberF1: LiveData<Int>
get() = _numberF1
fun addNumberF1() {
_numberF1.value = _numberF1.value?.plus(1)
}
}
主要活动:
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)
buttonFrag1Up.setOnClickListener { viewModel.addNumberF1() }
}
private fun navigateToFragment(fragment: Fragment) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.addToBackStack(null)
fragmentTransaction.replace(R.id.mainFrame, fragment)
fragmentTransaction.commit()
}
}
没有更新该值
正确的方法是什么?如果你想分享
viewModel
你应该在你的片段中写下:
val viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
而不是你所拥有的:
val viewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
如果您想共享
viewModel
,您应该在片段中写入以下内容:
val viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
而不是你所拥有的:
val viewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
您在哪里更新了该值?我在代码中看不到。代码中没有你称之为_numberF!。addNumnerF!(). 是否要在片段的开始处使用该值?buttonFrag1Up.setOnClickListener{viewModel.addNumberF1()}在哪里更新了该值?我在代码中看不到。代码中没有你称之为_numberF!。addNumnerF!(). 是否要在片段的开始处使用该值?buttonFrag1Up.setOnClickListener{viewModel.addNumberF1()}