首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Viewpager2,表格布局不适用于懒虫加载器

Viewpager2,表格布局不适用于懒虫加载器
EN

Stack Overflow用户
提问于 2022-01-26 12:28:20
回答 1查看 193关注 0票数 0

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

.xml

代码语言:javascript
运行
复制
   <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" />

片段

代码语言:javascript
运行
复制
@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()
                    }
                }
    }

}

视片

代码语言:javascript
运行
复制
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?) {
            }
        })
    }

}

Viewpager适配器

代码语言:javascript
运行
复制
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]
    }
}

您是否了解如何修复它,或者是否更改为另一个库?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 13:53:34

我在最后也做了同样的样本。我发现诀窍是在片段的initView()上使用onResume。内部调用startLoading

示例代码:

代码语言:javascript
运行
复制
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()
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70863425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档