小编Ana*_*ula的帖子

为什么必须删除作为observeForever 添加到LiveData 的观察者?

我在Android LiveData 文档中阅读了以下内容:

您可以使用 observeForever(Observer) 方法注册一个没有关联 LifecycleOwner 对象的观察者。在这种情况下,观察者被视为始终处于活动状态,因此始终会收到有关修改的通知。您可以调用 removeObserver(Observer) 方法删除这些观察者。

我正在使用 MVVM 架构模式构建一个应用程序,使用ViewModel并在我的 ViewModel 类中声明 LiveDatas。在我的 viewModel 中,我将 aobserveForever设置为 LiveData:

val password by lazy {
    MutableLiveData<String>()
}

init {
    initObservable()
}

private fun initObservable() {
    password.observeForever {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我从文档中的理解,每次实例化 ViewModel 的视图(使用前面的代码)被销毁时,我都应该删除观察者,对吗?但是一旦视图被销毁,观察者不应该被销毁(因为 ViewModel 实例在视图中被实例化并且也会被销毁)?

android android-mvvm android-livedata android-viewmodel

11
推荐指数
1
解决办法
7726
查看次数

DateFormatter 返回语言不正确的字符串

我正在尝试以我的设备语言显示格式化的日期,但它一直以英语显示(即使设备设置为葡萄牙语)。

在我的 ViewController 我创建了一个日期:

let todaysDate: Date = Date()
Run Code Online (Sandbox Code Playgroud)

我调用这个函数(它是 Date 的扩展):

func getFullDate() -> String {
    let dateFormatter  = DateFormatter()
    dateFormatter.dateFormat = "dd MMMM yyyy"
    dateFormatter.calendar = Calendar.current
    dateFormatter.locale = Locale.current
    return dateFormatter.string(from: self)
}
Run Code Online (Sandbox Code Playgroud)

输出始终为英文:

08 March 2019
Run Code Online (Sandbox Code Playgroud)

我还检查了终端中的 Locale.current 是否正确,我得到:

? en_BR (current)
Run Code Online (Sandbox Code Playgroud)

我不想定义硬编码的语言,因为我想支持其他语言,但它不起作用。你能给我一些关于如何解决这个问题的提示吗?

iphone nsdateformatter ios swift

7
推荐指数
2
解决办法
2085
查看次数

如何使用Airbnb环氧树脂进行UI测试?

目前,我正在一个使用环氧树脂的项目中工作,并且很难思考如何使用它创建UI /集成测试。在Epoxy github的存储库中,我仅获得有关测试RecyclerView的提示,但我认为这不是最好的方法。

你能给我一些提示吗?

谢谢 :)

testing android gui-testing android-testing epoxy

5
推荐指数
0
解决办法
92
查看次数