Я не уверен, правильно ли я понимаю архитектуру ViewModel
в Android.Я полагаю, что жизненный цикл ViewModel связан с действием, поэтому мы ожидаем того же экземпляра, и не имеет значения, передаем ли мы контекст действия или фрагмента в ViewModelProvider
?
В любом случае, вот мой ViewModel:
class MainViewModel : ViewModel() {
var teamName: String = "Warriors";
}
Вот моя активность:
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
viewModel.teamName = "Cavaliers";
Log.d("YouQi", "activity viewModel.teamName: ${viewModel.teamName}");
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, MainFragment.newInstance())
.commitNow()
}
}
}
и, наконец, вот мой фрагмент:
class MainFragment : androidx.fragment.app.Fragment() {
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
Log.d("YouQi", "fragment viewModel.teamName: ${viewModel.teamName}");
}
}
Я получаю следующий вывод в Logcat:
2018-06-03 16:06:24.591 31124-31124/com.axzae.zapkotlin D/YouQi: activity viewModel.teamName: Cavaliers
2018-06-03 16:06:24.652 31124-31124/com.axzae.zapkotlin D/YouQi: fragment viewModel.teamName: Warriors
Показывает, что значение не обновлено до Cavaliers.я использую ViewModel неправильно и должен использовать Dagger для получения синглтона?