ViewModel работает на поворот экрана в моем ожидании. Но когда шрифт изменился в настройках приложения, ViewModel ушел и воссоздан. не выжил. Я думаю, что ViewModel делает saveInstanceState бесполезным. Изменения шрифта не включены в Изменения конфигурации?
https://developer.android.com/topic/libraries/architecture/viewmodel
Класс ViewModel предназначен для хранения и управления данными, связанными с пользовательским интерфейсом, с учетом жизненного цикла. Класс ViewModel позволяет данным переживать изменения конфигурации, такие как поворот экрана.
Мои простые коды.
class MyViewModel: ViewModel() {
var abc: String? = null
}
class MyActvitiy: AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(MyViewModel::class.java)
// when screen rotation
// viewModel.abc is "1"
// when font change
// viewModel.abc is null
if (savedInstanceState == null) {
viewModel.abc = "1"
supportFragmentManager.beginTransaction()
.replace(R.id.container, MyFragment.newInstance())
.commitNow()
}
}
}
class MyFragment: Fragment() {
private lateinit var viewModel: MyViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstaceState: Bundle?) {
viewModel = activity?.run {
ViewModelProviders.of(this).get(MyViewModel::class.java)
} ?: throw Exception("Invalid Activity")
binding = DataBindingUtil.inflate(layoutInflater, R.layout.fragment_my, container, false)
return binding.root
}
}