首页 > 解决方案 > LiveData 完成加载时触发代码?

问题描述

我有一个spinner可供选择的项目和当前选择的项目LiveDatas在我的ViewModel. 我在开始活动之前知道当前选定的项目(它已传递到活动中),但可用项目是从数据库中获取的。我遇到的问题是当活动开始时(并且活动获得对 ViewModel 的引用),当前选定的项目被设置,并且在可以从数据库中获取所有项目之前完成。这导致我当前选择的项目在微调器中被覆盖。

微调器

<androidx.appcompat.widget.AppCompatSpinner
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:selectedValue="@={viewmodel.selectedItem}"
   android:entries="@{viewmodel.itemsList}" />

视图模型

public class MyViewModel extends ViewModel
{
    // Repository
    private final Repository repository;

    // LiveData
    public LiveData<List<Item>> itemsList;
    public MutableLiveData<Item> selectedItem = new MutableLiveData<>();

    public MyViewModel(Repository repository)
    {
        this.repository = repository;        
        itemsList = repository.getItems();
    }

    public void setSelectedItem(Item item)
    {
        selectedItem.postValue(item);
    }
}

有没有解决的办法?一个潜在的解决方案是稍后设置选定的项目,但这似乎有点骇人听闻,因为它是基于时间的。

标签: androidandroid-spinnerandroid-databindingandroid-livedata

解决方案


推荐阅读