Kotlin ViewPager Null PointerException - PullRequest
       94

Kotlin ViewPager Null PointerException

0 голосов
/ 11 ноября 2019

Я пытаюсь получить viewpager в уже существующем фрагменте . В другом проекте у меня не было проблем, когда viewpager был в файле activity_main.xml

Одна из попыток, которую я попробовал, заключается в следующем:

ViewPagerAdapter.kt

class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> KapperKeuze1Fragment()
            1 -> KapperKeuze2Fragment()
            else -> KapperKeuze3Fragment()
        }
    }

    override fun getCount(): Int {
    return 3
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity() {

lateinit var homeFragment: HomeFragment
lateinit var afspraakFragment: AfspraakFragment
lateinit var overFragment: OverFragment

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val bottomNavigation : BottomNavigationView = findViewById(R.id.bot_nav)

    homeFragment = HomeFragment()
    supportFragmentManager
        .beginTransaction()
        .replace(R.id.frame_layout, homeFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit()

    bottomNavigation.setOnNavigationItemSelectedListener { item ->

        when (item.itemId) {
            R.id.home -> {
                homeFragment = HomeFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, homeFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.afspraak -> {
                afspraakFragment = AfspraakFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, afspraakFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.over -> {
                overFragment = OverFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, overFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
        }
        true
    }
    val adapter = ViewPagerAdapter(supportFragmentManager)
    val pager = findViewById<View>(R.id.viewPager) as ViewPager
    pager.adapter = adapter
    }
}

фрагмент_afspraak.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

    <androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

Ошибка возникает в MainActivity.kt at: val pager = findViewById<View>(R.id.viewPager) as ViewPager

И дает:

Вызывается: kotlin.TypeCastException: ноль не может быть приведен к ненулевому типу androidx.viewpager.widget.ViewPager

...