专栏名称: Android_开发者
目录
相关文章推荐
51好读  ›  专栏  ›  Android_开发者

[译]区域设置更改和 AndroidViewModel 反面模式

Android_开发者  · 掘金  · android  · 2019-08-28 02:10

正文

阅读 78

[译]区域设置更改和 AndroidViewModel 反面模式

TL;DR:从视图模型中公开资源 ID 以避免显示废弃的数据。

在 ViewModel 中,如果要公开来自资源(字符串、可绘制文件、颜色……)的数据,则必须着重考虑 ViewModel 对象而忽视配置更改,例如 区域设置更改 。当用户更改其区域设置时,活动将重新被创建,但不创建 ViewModel 对象。

AndroidViewModel 是已知应用程序上下文的 ViewModel 的子类。然而,如果您没有注意到或没有对上下文的生命周期做出反应,访问上下文可能是危险的。 建议的做法是避免处理在 ViewModels 中具有生命周期的对象。

让我们看看跟踪器中基于此问题的示例: 在系统区域设置更改时更新 ViewModel

// 别这么做
public class MyViewModel extends AndroidViewModel {
    public final MutableLiveData<String> statusLabel = new MutableLiveData<>();
    
    public SampleViewModel(Application context) {
        super(context);
        statusLabel.setValue(context.getString(R.string.labelString));
    }
}
复制代码

问题的关键是字符串在构造器中只解释一次。 如果有区域设置更改,则不会重新创建视图模型 。这将导致我们的应用程序显示废弃的数据,因此只能部分本地化。







请到「今天看啥」查看全文