android-fragments 没有主构造函数,无法进行父类型初始化

daupos2t  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(202)
**How can I solved it**

//如何从Kotlin片段解析此错误 *

open class First : Fragment() {
}

// '显示在图像中的Fragment()未被访问' https://i.stack.imgur.com/Rcgl5.png

yruzcnhs

yruzcnhs1#

Fragment是Android中的特殊类,它们需要主构造函数(该构造函数位于类名之后)。此构造函数应该为空(如果您声明了任何字段,则会看到警告,提示您不应创建带参数的Fragment)。
因此,编译代码所需的就是在片段名称后添加括号:

class MyFragment() : Fragment() { /* some code here! remebmer about brackets after your MyFragment! */ }

此外,你应该避免声明任何带参数的构造函数。你应该通过Companion.newInstance(someArgs: List<Arg>) : YourFragment .(其中Companion是Fragment的伴随对象)来创建你的fragment。
您可以在此处找到应如何初始化片段:https://stackoverflow.com/a/9245510/7508302

hvvq6cgz

hvvq6cgz2#

尝试添加如下构造函数:

class First constructor() : Fragment() {
}

当你使用下面的构造函数来传递fragmentManager时,当你扩展其他类时,应该有一个默认的构造函数。

pkmbmrz7

pkmbmrz73#

请尝试以下代码:

class MyFragment() : Fragment() {
    constructor(supportFragmentManager:FragmentManager?) : this() {
    }
}

现在您有两个构造函数:
1.没有参数()
1.使用整数参数(supportFragmentManager)

2lpgd968

2lpgd9684#

下面是完整的例子,希望能有所帮助。父类:

open class ResponseModel {
    var statusCode: Int = 0
    var errorMessage: String = ""

    constructor()
    constructor(statusCode: Int) {
        this.statusCode = statusCode
    }

    constructor(statusCode: Int, errorMessage: String) : this(statusCode) {
        this.errorMessage = errorMessage
    }
}

子类别:

class Response2Model : ResponseModel {
    val a:String = ""
    constructor(statusCode: Int, errorMessage: String) : super(statusCode, errorMessage)    
    constructor(a: String) : super() {
        this.a = a
    }
}

相关问题