调用 recreate() 方法时不会刷新 TextInputLayout 提示
TextInputLayout hint doesn't get refreshed upon recreate() method call
我正在使用 TextInputLayout
。我将 string.xml
的提示设置为应用本地化。因此,在从下拉列表中更改语言后,我使用 recreate()
方法刷新整个 activity 具有选定语言资源的组件,但 TextInputLayout
提示没有得到刷新。
这是 material 库的已知错误 TextInputLayout
已经报告 here。
遗憾的是,目前还没有解决办法。
PS:一种可能的解决方法是在 onRestoreInstanceState
上再次手动调用 textInputLayout.setHint(R.string.your_string)
以更新文本。 (在super.onRestoreInstanceState(bundle)
之后调用)
或者在 onViewStateRestored
中调用它
根据@MatPag 的回答,您可以在 MainActivity 中添加此功能。
private fun findCurrentVisibleFragment(): BaseFragment? {
val navHost = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)
return navHost?.childFragmentManager?.primaryNavigationFragment as? BaseFragment?
}
你所有的 Fragments 都扩展了 BaseFragment。然后,你的 activity 的 onRestoreInstanceState 必须是这样的:
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
(findCurrentVisibleFragment() as? YourFragment)?.setHints()
}
其中 setHints() 是 YourFragment 中的一个函数,如下所示:
fun setHints() {
binding.editUserNameContainer.setHint(R.string.gen_user_name)
binding.editPasswordContainer.setHint(R.string.gen_password)
}
我正在使用 TextInputLayout
。我将 string.xml
的提示设置为应用本地化。因此,在从下拉列表中更改语言后,我使用 recreate()
方法刷新整个 activity 具有选定语言资源的组件,但 TextInputLayout
提示没有得到刷新。
这是 material 库的已知错误 TextInputLayout
已经报告 here。
遗憾的是,目前还没有解决办法。
PS:一种可能的解决方法是在 onRestoreInstanceState
上再次手动调用 textInputLayout.setHint(R.string.your_string)
以更新文本。 (在super.onRestoreInstanceState(bundle)
之后调用)
或者在 onViewStateRestored
根据@MatPag 的回答,您可以在 MainActivity 中添加此功能。
private fun findCurrentVisibleFragment(): BaseFragment? {
val navHost = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)
return navHost?.childFragmentManager?.primaryNavigationFragment as? BaseFragment?
}
你所有的 Fragments 都扩展了 BaseFragment。然后,你的 activity 的 onRestoreInstanceState 必须是这样的:
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
(findCurrentVisibleFragment() as? YourFragment)?.setHints()
}
其中 setHints() 是 YourFragment 中的一个函数,如下所示:
fun setHints() {
binding.editUserNameContainer.setHint(R.string.gen_user_name)
binding.editPasswordContainer.setHint(R.string.gen_password)
}