【问题标题】:Return type of 'getItem' is not a subtype of the return type of the overridden member“getItem”的返回类型不是被覆盖成员的返回类型的子类型
【发布时间】:2020-09-06 14:46:57
【问题描述】:

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

错误照片:

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)
    }
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    因为super方法在FragmentStatePagerAdapter中定义如下:

    @NonNull
    public abstract Fragment getItem(int position);
    

    因此,您的覆盖方法中不能为 nullable:

    override fun getItem(position: Int): Fragment {
    

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

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

    【讨论】:

    • 你能帮我做吗?我很新,我不知道要抛出什么异常。
    【解决方案2】:

    从您的 fun getItem(position: Int) 方法中,在里面

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多