问题标签 [android-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
172 浏览

android - 如何在 MVVM 架构中使用 livedata

TLDR:如何使用 LiveData 正确实现 MVVM 架构?

我有一个观察 viewModel 暴露的 livedata 的片段类:

viewModel.loginResultLiveData.observe

视图模型类只要求一个映射的 livedata 对象。

模型使用用例来映射原始格式的结果,也会映射错误:

问题是只有在loginSignInButton点击之后,模型才会创建一个 liveData 对象。但是我在设置 onClickListener 后立即开始观察这个对象。此外,每次单击按钮时,都会创建一个新的 实例viewModel.loginResultLiveData,这是没有意义的。

在这种情况下,如何使用 LiveData 正确实现 MVVM 架构?

我还可以将我现在拥有的逻辑移动LoginUseCase到 ModelView 中,然后使用类似的东西,这样可以避免前面描述的问题。但是我不能将映射/错误处理委托给用例。

0 投票
0 回答
325 浏览

android - 什么时候应该使用 @Embedded/@Relation 与 @ForeignKey 与 Android 房间的关系?

在查看了 android 文档和许多博客文章/youtube 视频之后,我仍然不清楚何时更倾向于将 @Embedded 与 @Relation 一起使用,而不是使用 @ForeignKey 关系。

@Embedded/@Relation 注释是否仅用于将 1 个实体映射到其他实体的关系对象?

0 投票
0 回答
139 浏览

android - 在 Android 上创建动态棋盘游戏的最佳选择是什么?

我想为Android开发一个动态匹配游戏。我希望将电路板尺寸从 4x4 更改为 8x8(例如 7x4 和 5x4 将是有效尺寸),具体取决于所选的难度级别。这意味着我可以拥有一个 5x4、7x4 板等。

我还想处理这个游戏中的方向变化。这意味着我想在方向更改中更改板尺寸(例如,纵向 5 x 4 可以变成 4 x 5 横向)。

我想出了两种不同的方法。

  1. 使用 . 创建 #N 个不同的布局文件Constraint Layout。然后我在我的代码中加入了一些逻辑fragment来决定选择哪个布局文件。一旦约束布局将自动收缩和拉伸,这将处理使其动态化的几乎所有复杂性。我意识到的缺点:代码看起来很乱。我将不得不findViewById取决于选择的布局;湾。一旦我不得不即时更改布局文件,配置更改可能是一个问题;C。维护会很困难。想象一下维护所有这些 XML 文件。

  2. 使用网格视图。我可以让它充满活力。适配器为我绑定它,我只需要告诉 GridView 我想要多少列。缺点:A。我需要想出魔法数学来使它适合;湾。高度是一个问题,onBind如果 ViewHolder 决定重新绑定视图,我可能会感到困惑。

在这一点上,我倾向于选择第一个选项。但我担心做出一个我会后悔的决定。

有什么建议或建议吗?

在此先感谢,丹尼尔

0 投票
1 回答
239 浏览

android - android 模块化 - 通过 Intent 启动时从另一个模块获取回调

我目前正在研究 android 模块化。如果 API 调用期间的模块 A(未经授权)在模块 B(登录模块)中启动活动,我有一个场景。是否可以回调模块 A 模块 B 中的登录是否成功,以便我们可以尝试失败的请求。

我们可以通过 StartActivtyForResult Intent 得到回调。但是当有很多 API 请求时,将无法很好地处理 Intent 结果。它还可能导致整个应用程序在处理意图时重复代码。

有没有办法保持失败的 API 调用并在从另一个模块回调后重试?有关该方法的任何想法都会有所帮助

0 投票
0 回答
154 浏览

android - Android Room @Embedded @Relation 类文件位置

我与我的同事争论我们将class使用@Embedded @Relation注释的文件放在哪里。它们算作实体吗?还是我们应该为他们创建另一个包?我已经看到一些github回购,他们将它们放在Entity包中,并且它们的 TBH 使用对我来说看起来像是实体。我们只是不想让项目架构师二人组因为项目的复杂性和庞大而对其他开发人员来说也易于阅读。

0 投票
3 回答
1290 浏览

android - Jetpack Navigation Component 处理带有底部导航的导航控制器和它的 Back Stack 导航

您好,我正在开发一个应用程序,但我卡在导航视图中的导航上。

示例我有活动,在里面我定义了导航主机控制器,如下所示

它工作正常。但现在我必须处理我无法理解的后栈导航。

我的问题是假设我是底部导航有 4 个菜单。家庭,狩猎,Qbank,考试。

我被选中了Qbank。Qbank 有 5 个片段 A、B、C、D、E。现在我已经开始遍历片段 A -> B B -> C C -> D

现在我可以选择在哪里导航回到 Direct A 之类的。当前位置是D

D - > A

但是我如何才能回到 A 并清除我遍历 A -> B -> C -> D 的堆栈,我想清除它,就像我想从 A 重新开始一样。

我如何使用 Jetpack 导航组件成为可能。

我尝试了直接导航或弹出堆栈导航,但它不起作用,它给了我错误,就像我直接导航到

我不知道如何处理这个导航。请帮助我解决这个问题

提前致谢。

0 投票
2 回答
78 浏览

android - 传递稍后(不跟随)片段所需数据的最佳方式?

我有一个应用程序需要在完成主要工作之前收集一些数据。因此,第一个片段收集数据,第二个片段收集数据,然后第三个片段使用数据。问题是:第一个片段中的数据与我在第二个片段中收集的数据不相关。如何将数据从第一个片段传递到第三个片段?我应该逐步传递在下一个片段参数中收集的所有数据,还是应该将它们存储在其他地方?我真的很想知道最佳实践是什么。


解释性图像


我不会使用数据库,因为我不需要永久存储数据。谢谢!

0 投票
1 回答
175 浏览

android - 如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

我有我的广播接收器,它应该扫描传入的消息并使用捆绑包并使用新的导航架构组件和导航控制器将原始地址和消息传递给新片段。我被卡住了,因为我在广播接收器中找不到视图。这是我到目前为止所尝试的。

我收到错误必需类型:提供的视图:上下文

0 投票
1 回答
103 浏览

android - Android中错误处理的更好方法

假设我的应用程序中有这个架构 建筑学

我的问题是处理错误的最佳时间是什么时候?

  1. 我是不是应该让网络源和缓存源抛出错误,我们在repository层处理所有可能的错误
  2. 我应该处理特定于框架的错误,并返回一个密封的类,该类是网络调用错误还是成功
0 投票
1 回答
348 浏览

android - 片段中具有应用程序上下文和额外参数的 ViewModel

我们知道,为了访问Application需要查找资源字符串或系统服务的上下文,我们扩展了我们的 ViewModel ,AndroidViewModel同时将额外的参数传递给 ViewModel 需要一个扩展的工厂ViewModelProvider.NewInstanceFactory()。我的问题是,当您使用时,AndroidViewModel您不需要Application在构造 ViewModel 时作为参数传递,但是在使用工厂时,您需要传递 Application 上下文以及额外的参数。

仅在使用 getActivity().getApplication() 时是否在内部完成AndroidViewModel?可以将 Fragment显式传递getActivity().getApplication()给您的 ViewModel 工厂吗?

样本

只需要应用程序上下文的 ViewModel

上面的 ViewModel 可以像默认方式一样在 Fragment 中构建。

但是,对于工厂,您将这样做

然后像这样构造它并依赖于Activity

这是正确的,并且不违反使用 ViewModel 的概念或最佳实践吗?