我想将我从工作管理器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
}
答案 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