小编Joa*_*Ley的帖子

具有即时/(动态)功能模块的导航组件

我正在尝试实现具有动态功能的导航组件

所以结构看起来像这样:

  • 应用程式(dynamicFeatures = []在gradle中包含动态程式)
  • 特征

    • 登录
    • 等等
  • 库-> globalNav

我一直在阅读很多没有成功的方法,因为每个功能都是完全隔离的,如何将它们粘合在一起而不相互依赖

例如,应用程序(app module)以开头,SplashActivity并检查会话状态,所以我的问题是我应该如何启动login_graphhome_graph,在第一种情况下,应在完成身份验证流程后启动主目录?

我目前正在尝试将它们粘合在一起的方式是使用一个globalNav模块(android-library),我发现了一些解决方法:

  • 完整的类路径,这意味着我从className开始意图(不好的是,因为它不是真正可扩展的,并且使得维护PITA成为可能)
Intent().setClassName(context.packageName, className).also { context.startActivity(it) }
Run Code Online (Sandbox Code Playgroud)
  • 深层链接(我想用作导航图的深层链接已包含那些链接),但是由于某种原因,即使只有我的应用程序使用它,它也始终显示“选择完整操作”选择器。

    • 我已经尝试过使用actions与深度链接相同的行为

任何建议将是巨大的:)


PS:我一直在浏览/阅读的一些参考资料:

PSS:如果我找到一个好的解决方案,我会尽力解决这个问题,我将确保也回答。

编辑

对于目前对此尚不支持的任何对此感兴趣的人,您可以在此处加注星标:https : //issuetracker.google.com/issues/132170186

android android-intent android-instant-apps android-architecture-components android-architecture-navigation

11
推荐指数
1
解决办法
697
查看次数

如何在androidTest上正确模拟ViewModel

我目前正在写一些UI单元测试片段,其中之一@Test是看是否显示正确的对象列表,这是不是一个集成测试,所以我想嘲笑ViewModel.

片段的变量:

class FavoritesFragment : Fragment() {

    private lateinit var adapter: FavoritesAdapter
    private lateinit var viewModel: FavoritesViewModel
    @Inject lateinit var viewModelFactory: FavoritesViewModelFactory

    (...)
Run Code Online (Sandbox Code Playgroud)

这是代码:

@MediumTest
@RunWith(AndroidJUnit4::class)
class FavoritesFragmentTest {

    @Rule @JvmField val activityRule = ActivityTestRule(TestFragmentActivity::class.java, true, true)
    @Rule @JvmField val instantTaskExecutorRule = InstantTaskExecutorRule()

    private val results = MutableLiveData<Resource<List<FavoriteView>>>()
    private val viewModel = mock(FavoritesViewModel::class.java)

    private lateinit var favoritesFragment: FavoritesFragment

    @Before
    fun setup() {
        favoritesFragment = FavoritesFragment.newInstance()
        activityRule.activity.addFragment(favoritesFragment)
        `when`(viewModel.getFavourites()).thenReturn(results)
    }

    (...)

    // This is …
Run Code Online (Sandbox Code Playgroud)

android mockito kotlin android-espresso android-architecture-components

10
推荐指数
3
解决办法
6629
查看次数

如何将项目发送到Kotlin.Flow(如Behaviorsubject)

我想知道如何将项目发送/发送到Kotlin.Flow,所以我的用例是:

在消费者/ ViewModel / Presenter中,我可以使用以下 功能进行订阅collect

fun observe() {
 coroutineScope.launch {
    // 1. Send event
    reopsitory.observe().collect {
      println(it)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是问题就在Repository侧面,对于RxJava,我们可以使用BehaviorBehavior主题将其公开为Observable/Flowable并发出类似以下的新项:

behaviourSubject.onNext(true)
Run Code Online (Sandbox Code Playgroud)

但是,每当我建立新流程时:

flow {

}
Run Code Online (Sandbox Code Playgroud)

我只能收集。如何将值发送到流?

android kotlin kotlin-coroutines kotlinx.coroutines.channels kotlinx.coroutines.flow

7
推荐指数
3
解决办法
644
查看次数

Android:导航组件和即时应用

导航组件文档鼓励包含多个片段的单个活动。

我们如何通过即时应用程序实现此目的?他们将如何直接降落在碎片中?

我正在考虑一个特定的用例:在已安装的应用程序上,用户在初始屏幕上启动,必要时登录,然后到达由BottomNavigation组成的主页,该页面由三个部分组成:Feature1,Feature2和Feature3 。每个要素都是一个片段或一组片段,它们位于BottomNav父对象的范围内。

现在可以创建一个直接在Feature3中打开的即时应用程序,这意味着没有父BottomNAv。功能本身就可以吗?

android kotlin android-instant-apps android-architecture-components android-architecture-navigation

6
推荐指数
0
解决办法
103
查看次数