小编Som*_*der的帖子

Android - 数据源与存储库

您会听到很多人在谈论 MVVM 或 MVI 等设计模式时谈论存储库和数据源。我一直在为 Retrofit 和 API 调用等内容创建存储库,并为 Firebase 或其他库等内容创建数据源。但我不能 100% 确定我理解 Android 世界中数据源和存储库之间的区别。

有人可以启发我吗?

提前致谢。

android datasource repository mvvm kotlin

13
推荐指数
2
解决办法
1万
查看次数

Android 测试 - 如何验证 navController.currentDestination.arguments?

我正在尝试使用浓缩咖啡和导航组件验证传递给我的新片段的数据。我从这里拿了一个例子来简化这个问题。

@Test
fun testNavigationToInGameScreen() {
    // Create a TestNavHostController
    val navController = TestNavHostController(
        ApplicationProvider.getApplicationContext())
    navController.setGraph(R.navigation.trivia)

    // Create a graphical FragmentScenario for the TitleScreen
    val titleScenario = launchFragmentInContainer<TitleScreen>()

    // Set the NavController property on the fragment
    titleScenario.onFragment { fragment ->
        Navigation.setViewNavController(fragment.requireView(), navController)
    }

    // Verify that performing a click changes the NavController’s state
    onView(ViewMatchers.withId(R.id.play_btn)).perform(ViewActions.click())
    assertThat(navController.currentDestination?.id).isEqualTo(R.id.in_game)

    // HERE IS WHERE I'M TRYING TO VALIDATE ARGUMENTS
    val currentDestinationArgs = navController.currentDestination.arguments
    val expectedArguments = bundleOf(ARG_A to true)

    assertEquals(currentDestinationArgs, expectedArguments)
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何转换currentDestinationArgs …

navigation testing android casting android-espresso

3
推荐指数
1
解决办法
588
查看次数

Jetpack Compose - 为什么我的 Material3 TopAppBar 顶部有一个巨大的填充?

我无法弄清楚为什么要在 CenterAlignedTopAppBar 的顶部添加此填充,使用 Material2 效果很好并且大小为 56dp,material3 正在执行此操作。

这是一些显示我正在做什么的代码,我的可组合项包装在一个片段中。目前我正在使用一个列,我也尝试使用 Scaffold 得到相同的结果。

在此输入图像描述

@OptIn(ExperimentalMaterial3Api::class)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
    return ComposeView(requireContext()).apply {
        setContent {

            val uiState = viewModel.uiState.collectAsState()
            viewModel.setIntent(MapIntent.GetOneOrAll(id))

            Column {
                if (uiState.value.hasToolbar) {
                    CenterAlignedTopAppBar(
                        modifier = Modifier.fillMaxWidth().wrapContentHeight(),
                        title = {
                            Text(
                                text = uiState.value.toolbarTitle ?: "", maxLines = 1, overflow = TextOverflow.Ellipsis,
                                color = colorResource(id = R.color.white)
                            )
                        },
                        navigationIcon = {
                            IconButton(onClick = { /* doSomething() */ }) {
                                Icon(
                                    imageVector = Icons.Filled.ArrowBack,
                                    contentDescription = null, …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

3
推荐指数
1
解决办法
1281
查看次数

Jetpack Compose - 修饰符参数是否应该仅应用于外部/最顶层视图?

在 jetpack compose 中,当将修改器传递到可组合项时,修改器是否应该仅应用于最外层视图,还是也应用于所有子视图?

这是一个简单的例子:

fun SomeComposable(modifier: Modifier = Modifier) {
    Column(modifier = modifier) {
        Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
        Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
        Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
    }
}
Run Code Online (Sandbox Code Playgroud)

我最初认为这是不正确的,因为传递到 SomeComposable 的任何修饰符也会更改所有子视图。

有没有任何文件可以非常清楚地说明这一点?我可以提供任何文档的链接吗?

谢谢你!

android android-jetpack-compose

2
推荐指数
1
解决办法
1325
查看次数