Skip to content

Instantly share code, notes, and snippets.

@NielsMasdorp
Created June 27, 2018 09:47
Show Gist options
  • Save NielsMasdorp/6d6bd2c1976fe3469fe7bdde87a82890 to your computer and use it in GitHub Desktop.
Save NielsMasdorp/6d6bd2c1976fe3469fe7bdde87a82890 to your computer and use it in GitHub Desktop.
Example of using Kotlin higher order functions to create views in a ViewPager
class FooFragment : DialogFragment() {

    private val viewPagerAdapter by lazy { BarViewPager() }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_foo, container, false)
    }

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

    private fun initViewPager() {
        viewPager.adapter = viewPagerAdapter
        explanationPagerAdapter.views = listOf({ container -> createViewForContainer(container, R.layout.layout1) },
                { container -> createViewForContainer(container, R.layout.layout2) },
                { container -> createViewForContainer(container, R.layout.layout3) },
                { container -> createViewForContainer(container, R.layout.layout4) })
    }
}
class FooPagerAdapter : PagerAdapter() {

    var views: List<(container: ViewGroup) -> View> = emptyList()
        set(value) {
            field = value
            notifyDataSetChanged()
        }

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

    override fun destroyItem(container: ViewGroup, position: Int, any: Any) {
        container.removeView(any as View)
    }

    override fun isViewFromObject(view: View, any: Any): Boolean = view == any

    override fun getCount(): Int = views.size
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment