标签: android-architecture-components

Android Paging Library - 具有多种排序类型的数据+网络

我最近看到谷歌有一个很棒的数据分页库。

在这个 Google IO 中:

Android Jetpack:使用 RecyclerView 和 Paging 管理无限列表(Google I/O '18)

他们解释了如何Data + Network DataSource从数据库中创建和获取数据Single Source of Truth,当数据库没有数据时,它会通过 .NET 从网络请求更多数据BoundaryCallback

因此,假设我在服务器上有一个电影列表。客户端(Android 用户)可以按受欢迎程度、标题、发布日期等对它们进行排序。

因此,如果用户第一次按标题对电影进行排序,一切都会很好,因为数据库中没有数据,并且将从服务器请求数据以按标题对它们进行排序并将其发送回来。但是,如果用户尝试按受欢迎程度对它们进行排序怎么办?由于数据库中存在大量电影(例如 50 部电影),它会按受欢迎程度对少量电影进行排序,然后尝试从服务器获取数据,这不是一个好的体验。

我无法为每种排序类型制作表格,因为这不是一个好的做法。那么我该如何克服这个问题呢?

非常感谢

sorting android android-architecture-components android-paging

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

Android Timber 多次记录

考虑以下简单设置。1 个片段与 1 个 ViewModel:

分段

class TestFragment : Fragment() {

    private val viewModel by lazy {
        ViewModelProviders.of(this).get(TestViewModel::class.java)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_test, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel.testLiveData.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
            Log.d("###", "whattt")
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

视图模型

class TestViewModel : ViewModel() {

    private val myVariable = Log.d("###", "Test")

    val testLiveData = MutableLiveData(false)
}
Run Code Online (Sandbox Code Playgroud)

为什么我从 Fragment 和 ViewModel 获得最多三倍的日志输出?

D/###: Test
D/###: whattt
D/###: Test
D/###: …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata android-viewmodel android-architecture-components

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

Android 中的 Kotlin 惰性协程

我正在尝试为我的协程创建惰性函数。我创建了这样的 util 函数。

fun <T> lazyCoroutine(scope: CoroutineScope, block: suspend CoroutineScope.() -> T): Lazy<T> {

    val some = scope.async(start = CoroutineStart.LAZY) {
        block.invoke(this)
    }
    return lazy {
        some.await()
    }
}
Run Code Online (Sandbox Code Playgroud)

但在终端显示

我的错误

我也不想回来Deferred<T>,我只想回来刚出来的deferred。我看到大部分文章返回的内容Deferred<T>与我的场景不符。有没有相关的解决办法请指点一下。祝你有美好的一天!。

我的情景

android android-architecture-components kotlin-coroutines

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

Android Studio 未显示可用的依赖项更新

我在Android Studio3.6.1,在我的应用程序中build.gradle我有例如

    implementation 'androidx.fragment:fragment-ktx:1.2.2'
Run Code Online (Sandbox Code Playgroud)

1.2.3 自 3 月 18 日以来就有版本,但当我将鼠标悬停在依赖项上或模块设置- >建议中时,都没有显示更新提示。

未显示更新的原因可能是什么?我可以以某种方式Android Studio手动触发来搜索依赖项更新并检查Android Studio上次是什么时候这样做的吗?

android android-fragments android-studio android-architecture-components

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

为什么我们将每个 Activity/Fragment 的 ViewModel 分开?

我最近开始研究 Android 架构组件。我发现 MVVM 架构非常方便,我想掌握它。在设计我的应用程序时,我应该为不同的活动/片段使用多个 ViewModel,还是应该为所有活动/片段使用单个 ViewModel?这两种方法的优缺点是什么?谢谢你。

android mvvm viewmodel android-livedata android-architecture-components

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

测试 Worker 实现( android workmanager )

我正在尝试测试一个简单的CoroutineWorker使用AndroidJUnit4,如官方文档 提到的

我的测试和错误:

package com.shalaga44.workmanager

import android.content.Context
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.work.testing.TestListenableWorkerBuilder
import kotlinx.coroutines.runBlocking
import org.hamcrest.Matchers.`is`
import org.junit.Assert.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class SleepWorkerTest {
    private lateinit var context: Context
    @Before
    fun setUp() {
        context = ApplicationProvider.getApplicationContext() }
    @Test
    fun testSleepWorker() {
        val worker = TestListenableWorkerBuilder<SleepWorker>(context).build()
        runBlocking {
            val result = worker.doWork()
            assertThat(result, `is`(Result.success())) //The Error here
            //Type inference failed. Please try to specify type arguments explicitly.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的工人: …

junit unit-testing kotlin android-architecture-components android-workmanager

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

Android分页库架构组件中PagingDataAdapter和PagedListAdapter的区别

他们如何在后台工作?

我对 PagedListAdapter 有点熟悉,但对 PagingDataAdapter(paging 3) 不太熟悉。PagingDataAdapter 的主要用途是什么,与 PagedListAdapter 有何不同

android android-architecture-components android-jetpack android-paging

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

使用 Compose UI 时如何为每个列表项创建单独的 ViewModel?

我正在开发一个交易应用程序。我需要列出用户股票及其价值(利润或损失)以及投资组合的总价值。

对于馆藏列表,在 MVP 架构中,我将为每个列表项创建一个演示者,但对于此应用程序,我决定使用 MVVM(Compose、ViewModels 和 Hilt)。我的第一个想法是为每个列表项创建一个不同的 ViewModel。我hiltViewModel()在可组合方法签名中使用来创建 ViewModel 的实例,但这总是给我相同的实例,而这不是我想要的。使用 MVVM 架构时,我正在尝试以正确的方式执行操作还是应该使用单个 ViewModel?您知道我可以看看的任何项目吗?下图是我的实际屏幕的超级简化,每个单元格都很复杂,这就是为什么我想为每个单元格使用不同的 ViewModel。任何建议都非常受欢迎。

在此输入图像描述

android mvvm viewmodel android-architecture-components android-jetpack-compose

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

为什么要使用UseCases?Android Jetpack在文档中未提及UseCases

在我的Android Clean体系结构中真的需要使用UseCases吗?

在Android Jetpack 文档中,他们没有提及它。他们直接从ViewModels访问资源库。

这不是更好的选择吗?难道UseCase代码不仅使调整代码变得不必要地困难了吗?

android mvvm clean-architecture android-architecture-components android-jetpack

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

How to share view models between fragments using Google's GithubBrowserSample approach?

I am very new using Android architecture components, so I decided to base my application using GithubBrowserSample to achieve many of my use cases. But i have the problem that i don´t know what is the correct way to share viewmodels between fragments with this approach.

I want to share the view model because i have a fragment with a viewpager with 2 fragments that need to observe data of the parent fragment view model

I used this before to …

android mvvm kotlin dagger-2 android-architecture-components

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