我想不使用空间将大数据从工作经理传递到我的片段

时间:2019-06-17 10:46:08

标签: android multithreading kotlin android-workmanager

我想将我从工作管理器api请求中获得的列表传递给我的片段,以便我可以更新recyclerview的适配器。我不想使用Room,因为列表大于10 Kb,但是我使用的是runOnUIThread,所以我可以通过它们。我通过使用findFragmentByTag获得了片段实例,但我不知道哪种方法是将列表传递给适配器的最佳方法

这是我的代码: 请帮助我:)

try {
        val groupsResponse = client.groups().execute()
        if (!groupsResponse.isSuccessful) return result

        val list = groupsResponse.body()!!

        activity?.runOnUiThread {

            activity as ViewPagerActivity

            val viewPager = activity.findViewById<ViewPager>(R.id.view_pager)
            val fragment = activity.supportFragmentManager.findFragmentByTag(
                "android:switcher:" +
                        R.id.view_pager + ":" + viewPager.currentItem
            )


             //how to pass data to adapter?

        }


        Result.SUCCESS


    } catch (exception: Exception) {
        exception.printStackTrace()
        result = Result.FAILURE


    }

2 个答案:

答案 0 :(得分:1)

如果有该片段的实例,则可以将其转换为具体的实现,然后调用您定义的方法。

但是您不应该这样。在配置更改时,将重新创建该片段。因此,您应该使用ViewModel,然后ViewModel会将数据传递给片段。 https://developer.android.com/topic/libraries/architecture/viewmodel

答案 1 :(得分:0)

您是否要在worker类中获取活动和片段的实例?如果是这样,请不要那样做-它无法正常工作。 WorkManager的全部意义在于,当前景UI尚未启动时,您的工作可以在后台执行,这意味着所有这些事情都可以为空。

相反,在您的片段中,观察工人的状态以获取相关的输出。 https://developer.android.com/topic/libraries/architecture/workmanager/how-to/states-and-observation