viewpager,in,out

160 阅读1分钟

1.ViewPagerActivity(使用PagerAdapter)

class ViewPagerActivity : AppCompatActivity() {
    private val views: MutableList<ImageView> = mutableListOf()
    private val icons by lazy { arrayOf(R.mipmap.ball0, R.mipmap.ball1) }
    private val adapter by lazy { SimplePagerAdapter(views) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_pager)
        for (i in icons.indices) {
            val imageView = ImageView(this)
            imageView.scaleType = ImageView.ScaleType.CENTER_CROP
            imageView.setImageResource(icons[i])
            views.add(imageView)
        }
        viewPager.adapter = adapter
    }
}

2.SimplePagerAdapter

class SimplePagerAdapter(private val views: MutableList<out View>) : PagerAdapter() {
    override fun isViewFromObject(view: View, `object`: Any): Boolean {
        return view == `object`
    }

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

    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        container.addView(views[position])
        return views[position]
    }

    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        container.removeView(views[position])
    }
}

3.material

implementation 'com.google.android.material:material:1.1.0'

4.ViewPagerActivity1(使用FragmentPagerAdapter)

class ViewPagerActivity1 : AppCompatActivity() {
    private val fraglist: MutableList<Fragment> = mutableListOf()
    private val fragadapter by lazy {
        SimpleFragPagerAdapter(supportFragmentManager, fraglist, arrayOf("hello1", "hello2"))
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_pager1)
        fraglist.add(Fragmentv1())
        fraglist.add(Fragmentv2())
        viewPager2.adapter = fragadapter
        tab_layout.setupWithViewPager(viewPager2)
    }
}

5.SimpleFragPagerAdapter

class SimpleFragPagerAdapter(
    fragmanager: FragmentManager,
    private val fraglist: MutableList<Fragment>, private val titles: Array<String>
) : FragmentPagerAdapter(fragmanager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    override fun getItem(position: Int): Fragment {
        return fraglist[position]
    }

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

    override fun getPageTitle(position: Int): CharSequence? {
        return titles[position]
    }

}

备注

1.PagerAdapter是ViewPager最基本的标配,FragmentPagerAdapter和FragmentStatePagerAdapter是viewpager内部使用Fragment的Adapter。
2.FragmentPagerAdapter和FragmentStatePagerAdapter继承自PagerAdapter
3.FragmentPagerAdapter和FragmentStatePagerAdapter:
相同点: 两者都会保持当前item和前后的一个item状态
就是说Adapter会提前初始化后一个item,并把当前item的前一个item保存在内存中,主要是为了在滑动时页面流畅。
不同点:对滑动过去的页面是否销毁(onDestroy、onDetach...)
-----------------------------------------------------------------------------
4.(占内存)viewPager.setOffscreenPageLimit(int)设置,前提五个页面
在FragmentPagerAdapter和FragmentStatePagerAdapter的情况下是一致的,系统会直接将五个页面全部加载到内存中,即全部执行到onResume方法,在切换页面时,不会再调用其他生命周期方法。
5.in out
父类泛型对象可以赋值给子类泛型对象,变小,用 in;
子类泛型对象可以赋值给父类泛型对象,变大,用 out。