ViewModel воссоздается при изменении шрифта в настройках приложения - PullRequest
0 голосов
/ 30 марта 2019

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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...