android-architecture-components相关内容

Android 架构组件 ViewModel - 与 Service/IntentService 通信

我正在探索 Google 的 Android 架构组件.在我的项目中,我依赖于 Services 和 IntentServices.从 IntentService 或服务与应用程序的 ViewModel 通信的正确方法是什么?使用 LiveData 可以实现吗? 解决方案 TL;DR 这是可以实现的 - 使用观察者关系.您的 IntentService 和可能的位置服务应该不知道您的 Vi ..

如何在导航组件的起始目的地处理后退按钮

我已经开始使用新的导航组件,而且我真的很在意它!不过我确实有一个问题 - 当我处于图表的起始目的地时,我应该如何处理后退按钮? 这是我现在使用的代码: findNavController(this, R.id.my_nav_host_fragment).navigateUp() 当我在图表上的任何位置时,它都运行良好,它会将我送回,但是当我在它的开始时 - 由于 backstack 为空 ..

Android 架构组件:ViewModel 如何观察存储库中的 LiveData

我正在研究 Android 架构组件 并且我'我有点困惑.在示例中,他们使用了一个存储库并在存储库的数据源由 ViewModel 观察.我不明白如何将数据源中的更改推送到 ViewModel,因为我在 ViewModel 中看不到任何将它们订阅到存储库的代码.类似地,片段观察 ViewModel 的 LiveData,但它们实际上订阅了 LiveData: //观察商品数据model.getOb ..

是否可以强制 LiveData 值不可为空?

有什么方法可以强制 LiveData 值不可为空?默认观察者实现似乎有 @Nullable 注释,它强制 IDE 建议该值可能为空,应手动检查: 公共接口Observer{/*** 当数据改变时调用.* @param t 新数据*/void onChanged(@Nullable T t);} 解决方案 虽然您可以做一些事情,但您有责任确保不会将 null 传递给 实时数据.除此之外,每个“ ..

刷新项目列表的 MutableLiveData

我在我的应用中使用来自架构组件的 LiveData 和 ViewModel. 我有一个分页的项目列表,当用户向下滚动时我加载更多.查询的结果存储在一个 MutableLiveData> 当我进行初始加载并将变量设置为新列表时,它会触发绑定适配器上的回调,将数据加载到回收视图中. 但是,当我加载第二页并将其他项目添加到列表时,不会触发回调.但是,如果我用包含旧项和新项的新列表替换列表 ..

具有多个参数的 MediatorLiveData 或 switchMap 转换

我正在使用 Transformations.switchMap 在我的 ViewModel 中,所以我的 LiveData 集合,在我的片段中观察到,对 code 参数的变化做出反应. 这很完美: public class MyViewModel extends AndroidViewModel {私人最终 LiveData日价格;私有最终 MutableLiveData代码 = 新的 M ..

MVVM 中视图和 ViewModel 之间的通信与 LiveData

ViewModel 和 View 之间通信的正确方式是什么,Google 架构组件 使用 LiveData> 其中视图订阅更改并相应地更新自身,但这种通信不适用于单个事件,例如显示消息、显示进度、隐藏进度等. Google 示例中有一些像 SingleLiveEvent 这样的技巧,但它仅适用于 1 个观察者.一些开发人员使用EventBus,但我认为当项目增长时它会很快失控. 有没有 ..

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

LiveData 类的这两种方法有什么区别?官方文档和教程对此非常模糊.在ma​​p() 方法中,第一个参数称为source,但在switchMap() 中,它称为trigger.这背后的原理是什么? 解决方案 根据文档 Transformations.map() 对存储在 LiveData 对象中的值应用函数,并将结果传播到下游. Transformations.swi ..

Annotation 参数必须是编译时常量

我看过这个问题.类似的错误.但在我的情况下是不同的. 在使用 Room 时,我正在创建表格.它工作正常. @Daointerface用户道{@Query("SELECT * FROM 用户")fun getAll(): List@Insert(onConflict = OnConflictStrategy.REPLACE)有趣的插入(用户:用户)@删除有趣的删除(用户:用户)} 但后来我 ..

使用 Room 更新 PagingLibrary 中的列表项(仅限网络)

我正在使用分页库从使用ItemKeyedDataSource的网络加载数据.获取用户可以编辑的项目后,此更新在内存缓存中完成(不使用 Room 之类的数据库). 现在由于 PagedList 本身无法更新(讨论 here) 我必须重新创建 PagedList 并将其传递给 PagedListAdapter. 更新本身没问题,但是在用新的PagedList更新recyclerView后, ..

BoundService + LiveData + ViewModel 新Android推荐架构最佳实践

我一直在思考将 Android 服务放置在新的 Android 推荐架构.我想出了很多可能的解决方案,但我无法决定哪一种是最好的方法. 我做了很多研究,但找不到任何有用的指南或教程.我发现的关于在我的应用程序架构中放置服务的位置的唯一提示是来自@JoseAlcerreca 中等帖子 理想情况下,ViewModel 不应该对 Android 一无所知.这提高了可测试性、泄漏安全性和模块化 ..

如何创建发出单个事件并仅通知最后订阅的观察者的 LiveData?

我创建了一个实时数据,它发出一个事件,就像在这个 example. 接下来我的问题是:当 LiveData 中的值发生变化时,如何仅通知最后订阅的观察者? 我想到的是将观察者存储在 SingleLiveData 类的链表中,然后仅当传递的观察者与列表的最后一个元素相同时才调用 super.observe. 我不确定这是否是最好的方法. 我想使用这种机制将 FAB 单击事件从 ..

导航架构组件 - 新资源对话框没有导航图的导航资源类型

即使在添加导航架构组件依赖项后,新资源对话框也没有导航图的导航资源类型 def nav_version = '1.0.0-alpha01'实现“android.arch.navigation:navigation-fragment:$nav_version"实现“android.arch.navigation:navigation-ui:$nav_version" 解决方案 确保您选中了设置 ..

Android Navigation 库深度链接:如何合成backstack

使用 Android 架构的导航组件,我有以下内容导航图 ->[主页] ->[文章列表] ->[具体文章] 我还有一个指向 [Specific Article] 的深层链接.当它打开时,向上导航当前转到 [Home]. 我想合成一个 backstack,以便向上导航而不是返回到 [文章列表](如果再次导航,则返回到 [Home]). 这样做的导航方式是什么? 解决方案 ..

Android 导航组件弹出到转换问题

我有两个动作 动作1 我想要的是当第二个动作被触发时,我想清除返回堆栈并只设置 loginFragment 以保留在堆栈中. 只有一个问题是当我执行 Action2 时,'slide_out_right' 作为退出动画执行 我知道如果我们从堆栈中弹出片段,将触发 action1 的 'popExitAnim' 而不是 action2 的 'exitAnim'. 但我 ..

具有多个堆栈的 Android JetPack 导航

我使用的是带有底部导航的 Jetpack Navigation version 1.0.0-alpha04.它有效,但导航没有正确发生.例如,如果我有选项卡 A 和选项卡 B,然后从选项卡 AI 转到页面 C,然后从那里转到选项卡 B 并再次返回选项卡 A,我将在选项卡 A 中看到根片段,而不是在页面 C 中不是我期望的. 我正在寻找一种解决方案,为每个选项卡提供不同的堆栈,因此当我返回时每个选 ..