“ getItem”的返回类型不是重写成员的返回类型的子类型

时间:2019-11-12 13:08:25

标签: android kotlin

我正在编写一个简单的优惠券应用程序,但是最近我更新了一些依赖项,并且我的Fragment 不允许允许我return null

错误照片: error

error2

package com.szakes1.makdolannative.adapters

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import com.szakes1.makdolannative.R
import com.szakes1.makdolannative.fragments.CouponFragment
import com.szakes1.makdolannative.fragments.HomeFragment

class ViewPagerAdapter(fm: FragmentManager, private val numberOfFrags: Int) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    override fun getItem(position: Int): Fragment? {
        when (position) {
            0 -> return HomeFragment()
            1 -> return CouponFragment(R.drawable.coupon_hamburger)
            2 -> return CouponFragment(R.drawable.coupon_icecream)
            3 -> return CouponFragment(R.drawable.coupon_cheeseburger)
            4 -> return CouponFragment(R.drawable.coupon_fries)
        }
        return null
    }

    override fun getCount(): Int {
        return numberOfFrags
    }

    override fun getPageTitle(position: Int): CharSequence? {
        when (position) {
            0 -> return "Jak używać?"
            1 -> return "Hamburger"
            2 -> return "Lody"
            3 -> return "Cheeseburger"
            4 -> return "Małe frytki"
        }
        return super.getPageTitle(position)
    }
}

2 个答案:

答案 0 :(得分:3)

由于超级方法在FragmentStatePagerAdapter中的定义如下:

@NonNull
public abstract Fragment getItem(int position);

因此,您的重写方法中不能有可为空的内容

override fun getItem(position: Int): Fragment {

最后,不要从null函数返回getItem(..)。相反,抛出异常

override fun getItem(position: Int): Fragment {
    when (position) {
       .....
    }
    throw IllegalStateException("position $position is invalid for this viewpager")
}

答案 1 :(得分:1)

通过内部的fun getItem(position: Int)方法

when(position) {
    //In these brackets
}
  1. 只需删除return null

  2. 然后在4 -> return "Małe frytki"下面添加以下行:

    else -> {throw IllegalStateException("$position is illegal") }