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。