小编Hak*_*baş的帖子

Hilt Fragments 问题 - onAttach 在不同的上下文中多次调用!刀柄碎片不应保留

我在 crashlytics 中遇到了以下崩溃,但无法重现问题。没有我可以用来追踪的异常解释:

dagger.hilt.internal.Preconditions.checkState (Preconditions.java:83)
com.xxx.xxx.ui.base.Hilt_BaseFragment.onAttach (Hilt_BaseFragment.java:46)
androidx.fragment.app.Fragment.onAttach (Fragment.java:1783)
com.xxx.xxx.ui.base.Hilt_BaseFragment.onAttach (Hilt_BaseFragment.java:36)
androidx.fragment.app.Fragment.performAttach (Fragment.java:2922)
androidx.fragment.app.FragmentStateManager.attach (FragmentStateManager.java:464)
Run Code Online (Sandbox Code Playgroud)

在BaseFragment中,有一些注入的对象。

@AndroidEntryPoint
abstract class BaseFragment : FragmentForLifeCycles() {

    @Inject
    lateinit var injectedClass: InjectedClass

}
Run Code Online (Sandbox Code Playgroud)

没有保留的片段(我的意思是片段没有 setRetainInstance(true) )

在一些从 BaseFragment 派生的片段中,根据该片段注入的需要,是否使用 @AndroidEntryPoint 进行注释。

这是生成的hilt类(Hilt_BaseFragment.java)onAttach块,其中发生了错误;

@Override
  @CallSuper
  @MainThread
  public void onAttach(Activity activity) {
    super.onAttach(activity);
    Preconditions.checkState(componentContext == null || FragmentComponentManager.findActivity(componentContext) == activity, "onAttach called multiple times with different Context! Hilt Fragments should not be retained.");
    initializeComponentContext();
    inject();
  }
Run Code Online (Sandbox Code Playgroud)

android android-activity dagger-hilt

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

如何避免 PagingAdapter 中的重复项?

我已经为我的 android 项目实现了 paging3。为了避免重复的项目,我创建了一个 DiffUtil.ItemCallback 对象,如下所示;

companion object {
    val diffCallback = object : DiffUtil.ItemCallback<Person>() {
        override fun areItemsTheSame(oldItem: Person, newItem: Person): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: Person, newItem: Person): Boolean {
            return oldItem.id == newItem.id
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在 PagingDataAdapter 中使用了该对象;

class PersonAdapter : PagingDataAdapter<Person, PersonViewHolder>(diffCallback) 
Run Code Online (Sandbox Code Playgroud)

在视图中,我从 viewModel 获取 PaginData 并将其提交到适配器中。

    private fun observeData() {
    lifecycleScope.launch {
        viewModel.getPeople().observe(this@MainActivity, {
            pagingAdapter.submitData(lifecycle, it)
        })
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,由于 DiffUtil.ItemCallback,具有相同 id 的人将不会被包含在适配器中。但它没有发生。RecyclerView 会打印每个 person 对象,即使它们具有相同的 id。

如何通过id区分数据?为什么 DiffUtil.ItemCallback 不起作用?谢谢。

android kotlin android-diffutils android-paging-3

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