标签: android-livedata

实时数据:候选分辨率将很快发生变化

在相同的情况下,当我调用对象的observe方法时,Android Studio 会显示警告消息LiveData

viewModel.emailValidationResult.observe(viewLifecycleOwner, {onEmailChanged(it)})
Run Code Online (Sandbox Code Playgroud)

候选解析将很快更改,请使用完全限定名称明确调用以下更接近的候选:

public open fun observe(owner: LifecycleOwner,observer: Observer<in Int?>): androidx.lifecycle.LiveData中定义的单元

据我了解,这是在更新 kotlin 1.4 之后发生的, 这实际上是什么意思?

android kotlin android-livedata

73
推荐指数
2
解决办法
7497
查看次数

为什么LiveData有一个单独的MutableLiveData子类?

它看起来MutableLiveData不同于LiveData仅将the setValue()postValue()方法公开,而在LiveData它们受到保护的情况下.

为这种变化创建一个单独的类的原因是什么,而不是简单地将这些方法定义为公共的LiveData

一般来说,这种继承形式(增加某些方法的可见性是唯一的变化)是一种众所周知的做法,以及它可能有用的一些场景(假设我们可以访问所有代码)?

oop android android-livedata android-architecture-components

63
推荐指数
3
解决办法
2万
查看次数

Kotlin Flow 与 Android LiveData

我有一些关于Kotlin Flow 的问题

  1. 我可以LiveData从多个 Fragment观察。我可以这样做Flow吗?如果是,那么如何?
  2. 我们可以使用&LiveData从单个中获得多个。有没有办法从一个来源获得多个?LiveDatamapswitchMapFlowFlow
  3. 使用MutableLiveDataI 可以使用变量引用从任何地方更新数据。有什么办法可以做同样的事情Flow吗?

我有一个用例,例如:我将观察一个SharedPreferencesusing callbackFlow{...},它会给我一个单一的源 Flow。从那个 Flow 中,我想为每个键值对创建多个 Flow。

这些可能听起来很愚蠢的问题。我是 Rx 和 Flow 世界的新手。

android kotlin android-livedata kotlin-coroutines kotlin-flow

60
推荐指数
3
解决办法
2万
查看次数

分页库 - 带有API获取页面和大小的网络+数据库的边界回调

简短的问题:

使用使用页面大小加载新页面和BoundaryCallback类的API,从Architecture组件处理Paging库上的数据库+网络的正确方法是什么?

研究和解释

目前,BoundaryCallback在用于体系结构组件的分页库中使用的类接收列表中元素的实例作为参数,而没有该元素所在的实际上下文.它发生在onItemAtFrontLoadedonItemAtEndLoaded.

我的Api应该接收页面和页面大小以加载下一个数据块.作为分页列表构建器的一部分添加的边界回调应该告诉您何时根据预取距离和页面大小加载下一页数据.

由于API需要的页码和页面提供的尺寸,我看不到的方式发送到API只是通过接收从列表中提供的元素之一onItemAtFrontLoadedonItemAtEndLoaded.检查此链接中的google示例,他们使用最后一个元素的名称来获取下一个元素,但这不适合具有页面+大小的Api.

他们还有另一个只使用网络的例子PagedKeyedDatasource,但没有关于如何将它与数据库和BoundaryCallback混合的样本或线索.

编辑:到目前为止我找到的解决方案只是将最后加载的页面存储在共享首选项上,但这听起来像是一个肮脏的技巧.

有关官方输入,请参阅 https://github.com/googlesamples/android-architecture-components/issues/252#issuecomment-392119468.

android android-room android-livedata android-architecture-components android-paging

58
推荐指数
1
解决办法
3411
查看次数

MutableLiveData中setValue()和postValue()的区别

有两种方法可以改变价值MutableLiveData.但是,什么是区别setValue()postValue()MutableLiveData.

我找不到相同的文档.

这是MutableLiveDataAndroid 类.

package android.arch.lifecycle;

/**
 * {@link LiveData} which publicly exposes {@link #setValue(T)} and {@link #postValue(T)} method.
 *
 * @param <T> The type of data hold by this instance
 */
@SuppressWarnings("WeakerAccess")
public class MutableLiveData<T> extends LiveData<T> {
    @Override
    public void postValue(T value) {
        super.postValue(value);
    }

    @Override
    public void setValue(T value) {
        super.setValue(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-livedata mutablelivedata

57
推荐指数
8
解决办法
2万
查看次数

从ViewModel观察LiveData

我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们.现在我想将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从我的数据获取类返回的LiveData对象.observe方法需要一个LifecycleOwner对象作为第一个参数,但我显然没有在我的ViewModel内部,我知道我不应该保持对ViewModel内部的Activity/Fragment的引用.我该怎么办?

android android-livedata android-viewmodel android-architecture-components

55
推荐指数
5
解决办法
3万
查看次数

MVVM中的MediatorLiveData和MutableLiveData有什么区别

我搜索了很多但没有找到问题的清晰答案:

  1. MediatorLiveData和MutableLiveData有什么区别?

  2. 使用其中任何一种的合适条件是什么.

android android-livedata android-architecture

51
推荐指数
4
解决办法
1万
查看次数

使用 viewLifecycleOwner 作为 LifecycleOwner

我有一个片段:

class MyFragment : BaseFragment() {

   // my StudentsViewModel instance
   lateinit var viewModel: StudentsViewModel

   override fun onCreateView(...){
        ...
   }

   override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
       super.onViewCreated(view, savedInstanceState)

       viewModel = ViewModelProviders.of(this).get(StudentsViewModel::class.java)
       updateStudentList()
   }

   fun updateStudentList() {
        // Compiler error on 'this': Use viewLifecycleOwner as the LifecycleOwner
        viewModel.students.observe(this, Observer {
            //TODO: populate recycler view
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的片段中,我有一个 StudentsViewModel 的实例,它在onViewCreated(...).

在,StudentsViewModelstudents是一个LiveData

class StudentsViewModel : ViewModel() {
    val students = liveData(Dispatchers.IO) {
          ...
    } …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-livedata android-viewmodel

49
推荐指数
2
解决办法
2万
查看次数

map()和switchMap()方法有什么区别?

LiveData类的这两个方法有什么区别?官方文档和教程对此非常模糊.在map()方法中,第一个参数叫做source,但在switchMap()中它调用了trigger.这背后的理由是什么?

android android-livedata android-architecture-components

42
推荐指数
7
解决办法
9451
查看次数

为什么要为新连接的观察者触发两次LiveData观察者

我的理解LiveData是,它将触发观察者对当前状态变化的数据,而不是一系列历史状态变化的数据.

目前,我有一个MainFragment执行Room写操作的程序,用于将非删除数据更改为已删除的数据.

我也是另一个TrashFragment观察到破坏数据的人.

请考虑以下情形.

  1. 目前有0个已删除的数据.
  2. MainFragment是当前活动的片段.TrashFragment尚未创建.
  3. MainFragment添加了1个已删除的数据.
  4. 现在,有1个已删除的数据
  5. 我们采用抽屉式导航来代替MainFragmentTrashFragment.
  6. TrashFragment的观察者将首先收到onChanged0个已删除的数据
  7. 再次,TrashFragment观察者将接下来接收onChanged1个已删除的数据

我的期望是,第(6)项不应该发生.TrashFragment应该只接收最新的已删除数据,即1.

这是我的代码


TrashFragment.java

public class TrashFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        noteViewModel = ViewModelProviders.of(getActivity()).get(NoteViewModel.class);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-architecture-components

41
推荐指数
9
解决办法
3万
查看次数