【问题标题】:Fragment Type Mismatch in Android KotlinAndroid Kotlin 中的片段类型不匹配
【发布时间】:2018-02-19 05:42:30
【问题描述】:

我将一步一步尝试在 Kotlin/Android 中创建一个简单的选项卡布局。我对我发现的许多教程感到非常沮丧,因为它们要么 1) 有效,但设计过度,很难看到正在发生的事情,或者 2) 似乎不起作用。

这是案例 2) 中的一种,它非常接近工作,但出现了问题。我已经发现了问题,但不知道如何解决。

http://www.techotopia.com/index.php/Kotlin_-_Creating_a_Tabbed_Interface_using_the_TabLayout_Component

我拥有与教程中完全相同的所有内容,我得到的唯一错误是这部分:

package com.ebookfrenzy.tablayoutdemo

import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter

class TabPagerAdapter(fm: FragmentManager, private var tabCount: Int) : 
            FragmentPagerAdapter(fm) {

    override fun getItem(position: Int): Fragment? {

        when (position) {
            0 -> return Tab1Fragment()
            1 -> return Tab2Fragment()
            2 -> return Tab3Fragment()
            3 -> return Tab4Fragment()
            else -> return null
        }
    }

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

我知道Tab1Fragment(), Tab2... 都不是Fragment 类型,这是fun getItem 的返回类型。这很令人困惑,因为它们是这样声明的类:

class Tab1Fragment : Fragment()

我觉得应该没问题。

这是我所看到的图片,以防有人不相信我。

https://imgur.com/a/XvZaP

有人能告诉我发生了什么吗?

【问题讨论】:

  • 你的Tab4Fragment等是否扩展android.support.v4.app.Fragment
  • 你的片段是否扩展android.support.v4.app.Fragmentandroid.app.Fragment
  • 检查所有 Tab 片段中的导入语句。它应该是'import android.support.v4.app.Fragment'

标签: android android-fragments tabs kotlin type-mismatch


【解决方案1】:

您的代码中有两个可能的错误

您的片段扩展了android.support.v4.app.Fragment,并且适配器中的getItem() 方法返回android.app.Fragment,反之亦然。

在任何情况下,确保您的片段和适配器方法都返回相同的类型,最好是android.support.v4.app.Fragment,然后您就可以开始了。

【讨论】:

  • 谢谢,但现在我在每个片段中都得到了Error:(36, 5) 'onCreateView' overrides nothing。废话。
  • 这可能是因为您更改了父类。删除任何被覆盖的方法并再次实现它们。这应该可以解决问题。
  • 抱歉,我不确定我是否理解。我没有更改任何我可以告诉的父类,我所做的只是将每个片段文件中的导入声明更改为新的android.support.v4.app.Fragmentremove any method that is overwritten 是什么意思?我知道它是一个覆盖类,但我不知道它的覆盖功能在哪里 - 我想我没有触及它。
  • 当您将 android.app.Fragment 更改为 android.support.v4.app.Fragment 时,它实际上更改了父类。任何具有@Override 注释的方法都是被覆盖的方法。所以只需删除上面有@Override 的那些方法。然后,Android Studio 将向您展示在课堂上阅读曲折的台词。按 alt+enter 再次生成这些方法。确保备份方法内的代码。
【解决方案2】:

你应该使用

import android.support.v4.app.Fragment

代替

import android.app.Fragment

【讨论】:

  • 现在还要寻找 androidx.app.fragment 与 android.app.fragment。 androidx 与 android。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多