viewpager加载fragment切换后数据会再次加载的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29654885/article/details/86129373

1.懒加载

package com.berlin.lslibrary.scroll

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.berlin.lslibrary.R
import com.berlin.lslibrary.recyclerview.RecyclerAdapter
import kotlinx.android.synthetic.main.layout_recyclerview.*

abstract class LazyFragment : Fragment() {

    private var rootView: View? = null
    private var hasLoaded = false

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        if (rootView == null) {
            rootView = layoutInflater.inflate(R.layout.layout_recyclerview, container, false)
            hasLoaded = true
        }
        return rootView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        if (rootView != null) {
            load()
        }
    }

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        load()
    }

    fun load() {
        if (hasLoaded && userVisibleHint) {
            lazyLoad()
            hasLoaded = false
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        hasLoaded = false
    }

    abstract fun lazyLoad();
}

主要是setUserVisibleHint方法 

2.重写FragmentStatePagerAdapter

package com.berlin.lslibrary.scroll

import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.view.ViewGroup

class FragmentPagerAdapter(var fragmentManager: FragmentManager, var fragments: ArrayList<LazyFragment>) :FragmentStatePagerAdapter(fragmentManager){

    override fun getItem(p0: Int) =  fragments.get(p0)

    override fun getCount(): Int {
        return fragments.size
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return "page $position"
    }

    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        
    }

}

主要是重写destroyItem方法 把super删了 就可以了 

猜你喜欢

转载自blog.csdn.net/qq_29654885/article/details/86129373