Kotlin FragmentStatePagerAdapter показывает пустые представления - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь настроить адаптер ViewPager внутри фрагмента, чтобы показать другие фрагменты.Проблема в том, что при вызове ViewPager автоматически вызывает первые два фрагмента при отображении только пустой страницы.

Вот как установлен ViewPager:

class SwipePagerFragment : Fragment() {

    private lateinit var pager: ViewPager

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.fragment_swipe_pager, container, false)
        pager = view.findViewById(R.id.fragmentSwipePager_pager)
        val pagerAdapter = ScreenSlidePagerAdapter(childFragmentManager)
        pager.adapter = pagerAdapter
        return view
    }

    private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
        override fun getCount(): Int = 3

        override fun getItem(position: Int): Fragment = when (position) {
            0 -> MeFragment()
            1 -> AccountFragment()
            3 -> SearchFragment()
            else -> ContactsFragment()
        }
    }

    override fun onDestroyView() {
        val frContainer = (activity as MainActivity).findViewById<View>(R.id.activityMain_fragment) as ViewGroup
        frContainer.removeAllViews()
        super.onDestroyView()
    }
}

Вот что я получаю в logcat:

... D/FRG ME: # onCreateView
... D/FRG Account: # onCreateView

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

О, LOL, я понял это. Я установил макет для фрагмента, который я использовал для ViewPager, следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:id="@+id/fragmentSwipePager_rootScroll"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    tools:context=".SwipePagerFragment">
    <android.support.v4.view.ViewPager
        android:id="@+id/fragmentSwipePager_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</ScrollView>

Проблема была в свойстве "layout_height" ScrollView, так как оно было установлено в "wrap_content" и без реального содержимого с ненулевой высотой внутри, что привело к рисованию линии нулевой высоты и отображению содержимого фрагментов внутри нее. Изменение "layout_height" на "match_parent" решает мою проблему.

0 голосов
/ 21 июня 2019

Я думаю, что вы пытаетесь добавить 4 фрагмента в ViewPager и предоставили getCount () = 3

переопределить веселье getCount (): Int = 4

Также внесите изменения в адаптер следующим образом:

private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : 
FragmentStatePagerAdapter(fm) {
    override fun getCount(): Int = 4

    override fun getItem(position: Int): Fragment = when (position) {
        0 -> MeFragment()
        1 -> AccountFragment()
        2 -> SearchFragment()
        else -> ContactsFragment()
    }
}
...