jjzjj

LiveData

全部标签

android - LiveData 防止在开始观察时收到最后一个值

是否可以防止LiveData在开始观察时收到最后一个值?我正在考虑将LiveData用作事件。例如显示消息、导航事件或对话触发器等事件,类似于EventBus。关于ViewModel和fragment之间通信的问题,Google给了我们LiveData来用数据更新View,但是当我们需要更新时这种通信方式不适合Viewonlyoncewithsingleevent,我们也不能在ViewModel中保存View的引用并调用一些方法,因为它会造成内存泄漏。我发现了类似的东西SingleLiveEvent-但它仅适用于1个观察者,不适用于多个观察者。---更新----正如@EpicPanda

android - LiveData 双向数据绑定(bind),无需公开 MutableLiveData

我正在尝试在EditText上使用双向数据绑定(bind),如果我将字段公开为MutableLiveData就可以正常工作,因为它通常在我在网上找到的示例中看到。但是,有充分的理由不公开MutableLiveData,并且这些理由并非神奇地无效,因为我决定使用数据绑定(bind)库。编辑:这里的主要动机是MyViewModel应该保持对设置数据的控制(这就是为什么不建议直接公开MutableLiveData的原因),在setter中我可以执行任何检查或必要的转换,然后只需在LiveData上调用setValue。我通常从我的ViewModel公开一个LiveDatagetter和一个单

android - 过滤由 View 模型的 LiveData 条目填充的回收器 View

我正在使用架构组件View模型的LiveData来填充回收器View,并想添加一个搜索View过滤器,但找不到任何解决方案。我尝试在适配器中使用可过滤接口(interface),但它也不起作用,可能是因为View模型不允许它更改。我的适配器是-publicclassNetworkAdapterextendsRecyclerView.AdapterimplementsFilterable{//MembervariabletohandleitemclicksfinalprivateItemClickListenermItemClickListener;//Classvariablesfor

安卓喷气背包 : RecyclerView is not updating when LiveData is set

所以我有一个简单的实现来在RecyclerView中显示用户列表,并在ViewModel中查询该列表作为LiveData.问题是UI未更新以显示最新列表-称为users-即使观察到列表也是如此。我现在只是设置了一个演示用户列表。这是我的View模型:classMainViewModel:ViewModel(){privatevaldemoData=listOf(User(userName="Bob",favoriteColor="Green"),User(userName="Jim",favoriteColor="Red"),User(userName="Park",favoriteC

android - 如何将 editText 值传递给 viewModel 和 Livedata (Kotlin)

我正在研究Android+Kotlin,做一个简单的例子来理解LiveData+ViewModel。非常简单:我有一个根Activity和两个fragment。FragmentOne有两个EditText。对这些值求和,我需要将结果传递给ViewModel。然后我在根Activity和FragmentTwo中使用观察来查看更改的数据。fragment一classFragmentOne:Fragment(){privatevalmodelbylazy{ViewModelProviders.of(activity).get(MyViewModel::class.java)}varresul

android - 使用 LiveData 转换获取 Room 关系数据库值

Android和Java的新手,正在尝试通过制作应用来学习。但现在我无法正确获取关系数据并将其显示在RecyclerView中(使用ListAdapter和InfiniteScroll)。这是我到目前为止所做工作的要点。实体:项目:@Entity(...)publicclassItem{@PrimaryKey(autoGenerate=true)privatelongitem_id;@SerializedName("title")@ExposeprivateStringtitle="";@Ignore@SerializedName("labels")@ExposeprivateList

android - Repository 方法在 Asynchronous Retrofit 调用中设置 LiveData 值

查看Android官方指南时ArchitectureComponents,在用Retrofit请求解释存储库层的部分中,有一段我似乎无法完全理解的代码:publicclassUserRepository{privateWebservicewebservice;  //...  publicLiveDatagetUser(intuserId){    //Thisisnotanoptimalimplementation,we'llfixitbelow    finalMutableLiveDatadata=newMutableLiveData();    webservice.getUs

android - 如何同步获取LiveData的值?

对于LiveData,RxJava的Observable中有没有类似blockingNext或者blockingSingle的同步获取值?如果不是,我怎样才能实现相同的行为? 最佳答案 您可以调用getValue()返回当前值(如果有的话)。但是,没有“在有值之前阻止”选项。大多数情况下,这是因为LiveData旨在在主应用程序线程上使用,应避免无限期阻塞调用。如果您需要“阻塞直到有一个值”,请使用RxJava并确保您在后台线程上进行观察。 关于android-如何同步获取LiveDat

Android:在 DAO 中使用 Room 数据库和 LiveData 的整洁架构

我正在尝试将整洁的架构方法应用到我的项目(Link:guideI'mcurrentlyreferencing)。我正在使用Room数据库进行本地存储,我希望它成为应用程序中的单一数据源-这意味着从网络调用收集的所有数据首先保存在数据库中,然后才传递给演示者。Room提供从其DAO返回的LiveData,这正是我需要的。不过,我也想使用存储库作为访问数据的单一方式。这是领域层(最抽象的一个)中存储库接口(interface)的示例:interfaceRepository{funfindByUsername(username:String):Listfunadd(entity:T):Lon

java - 使用 livedata 压缩 4 个或更多异步调用

有没有可能使用livedata并行运行多个异步调用的方法?假设我有4个异步调用。我想等到一切都完成,然后相应地使用所有4个调用的结果。我能想到的一种方式是这样publicclassMakeParallel{privatefinalCountDownLatchcountDown=newCountDownLatch(4);publicvoidfirstCall(){Transformation.map(makeFirstCall(),input->{if(input.isSuccessful()){countDownLatch.countDown();checkResult();}retu