Viewpager2,tablayout 不适用于 lazyloader

Viewpager2, tablayout doesn't work with lazyloader

我有 ViewPager2TablayoutLazyloder。 第一次进入片段时,点会在加载时移动,但在我从一个片段滑动到另一个片段并返回到我的第一个片段后,点不再移动。

.xml

   <com.agrawalsuneet.dotsloader.loaders.LazyLoader
        android:id="@+id/dots_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_margin="20dp"
        android:layout_marginTop="30dp"
        app:lazyloader_animDur="400"
        app:lazyloader_dotsDist="10dp"
        app:lazyloader_dotsRadius="7dp"
        app:lazyloader_firstDelayDur="150"
        app:lazyloader_firstDotColor="#fff"
        app:lazyloader_interpolator="@android:anim/decelerate_interpolator"
        app:lazyloader_secondDelayDur="300"
        app:lazyloader_secondDotColor="#fff"
        app:lazyloader_thirdDotColor="#fff"
        tools:ignore="MissingClass" />

片段

@AndroidEntryPoint
class InspirationQuotesFragment :
    BaseFragment<FragmentInspirationQuotesBinding, InspirationQuotesViewModel>
        (FragmentInspirationQuotesBinding::inflate) {
    override val vm: InspirationQuotesViewModel by viewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        backgroundAnimation()
        getRandomPicture()
        onFloatingActionClick()
    }

    override fun onResume() {
        super.onResume()


    }

    private fun getRandomPicture() {
        layout.floatingActionBtn.setOnClickListener {
            onFloatingActionClick()
        }
    }

    private fun onFloatingActionClick() {
        layout.floatingActionBtn.animate().apply {
            rotationBy(360f)
            duration = 1000
        }.start()
        layout.ivRandomPicture.visibility = View.GONE
        makeApiRequest()
    }

    private fun backgroundAnimation() {
        val animationDrawable: AnimationDrawable = layout.rlLayout.background as AnimationDrawable

        animationDrawable.apply {
            setEnterFadeDuration(1000)
            setExitFadeDuration(3600)
            start()
        }
    }

    private fun makeApiRequest() = lifecycleScope.launch {
            vm.randomPicture
                .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
                .collect { response ->
                    if (response.fileSizeBytes < 600000) {
                        Log.d("fragment", "itGetsValue")
                        Glide.with(requireContext()).load(response.url)
                            .into(layout.ivRandomPicture)
                        layout.ivRandomPicture.visibility = View.VISIBLE
                    } else {
                        onFloatingActionClick()
                    }
                }
    }

}

viewpagerfragment

package com.example.learningmanager.fragments

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.View
import androidx.fragment.app.viewModels
import com.example.learningmanager.base.ui.BaseFragment
import com.example.learningmanager.databinding.FragmentViewPagerBinding
import com.example.learningmanager.fragments.inspirationquotes.ui.InspirationQuotesFragment
import com.example.learningmanager.fragments.notesmanager.ui.NotesManagerFragment
import com.example.learningmanager.fragments.setgoals.ui.SetGoalsFragment
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class ViewPagerFragment @Inject constructor() : BaseFragment<FragmentViewPagerBinding, ViewPagerViewModel>(
    FragmentViewPagerBinding::inflate
) {

    override val vm: ViewPagerViewModel by viewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // viewpager with list of fragments
        val fragmentList = arrayListOf<Fragment>(
            InspirationQuotesFragment(),
            NotesManagerFragment(),
            SetGoalsFragment()
        )

        val adapter = ViewPagerAdapter(
            fragmentList,
            childFragmentManager,
            lifecycle
        )
        layout.viewPager.adapter = adapter

        // initialize tablayout with names
        TabLayoutMediator(layout.tabLayout, layout.viewPager) {tab, position ->
            when (position) {
                0 -> tab.text = "Inspiration"
                1 -> tab.text = "Notes"
                2 -> tab.text = "Set Goals"
            }
        }.attach()

         listener if tab changes and it is possible to make specific action
        layout.tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab?) {
            }
            override fun onTabUnselected(tab: TabLayout.Tab?) {
            }

            override fun onTabReselected(tab: TabLayout.Tab?) {
            }
        })
    }

}

viewpageradapter


class ViewPagerAdapter(list: ArrayList<Fragment>, fm: FragmentManager, lifecycle: Lifecycle) :
    FragmentStateAdapter(fm, lifecycle) {

    val fragmentList = list

    override fun getItemCount(): Int {
        return fragmentList.size
    }
    override fun createFragment(position: Int): Fragment {
        return fragmentList[position]
    }
}

您是否知道如何修复它或如何更改到另一个库? 谢谢

我 运行 我这边的样本相同。我发现诀窍是在片段的 onResume 上使用 initView()。其中内部调用 startLoading.

示例代码:

lateinit var dotsLoader: LazyLoader

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_test1, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        dotsLoader = view.findViewById(R.id.dots_loading)
    }

    override fun onResume() {
        super.onResume()
        dotsLoader.initView()
    }