使用提供的参数不能调用以下任何函数:Kotlin

时间:2019-06-14 09:45:35

标签: android kotlin

我是Kotlin的新手,我在构造函数中添加了一个参数,并且抛出此错误?如何找出我不明白的问题。任何帮助将是可贵的

Error public constructor AppView(context: Context, _listener: OnFragmentInteractionListener, _position: Int)defined in com.views.home.AppView @JvmOverloads public constructor AppView(mlist: StoreViewMap, context: Context, attrs: AttributeSet? = ..., defStyle: Int = ...) defined in com.views.home.AppView




class AppView @JvmOverloads constructor(mlist: StoreViewMap, context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
LinearLayout(context, attrs, defStyle) {
private lateinit var listener: OnFragmentInteractionListener
private var position = 0
private val mainView: View
var mlistener: StoreViewMap = mlist

constructor(context: Context, _listener: OnFragmentInteractionListener, _position: Int) : this(context) {
    listener = _listener
    position = _position

    initFeed()
}

init {
    val layoutInflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    mainView = layoutInflater.inflate(R.layout.view_home_feed, this)
}

private fun initFeed() {
    mainView.homeSwipeLayout.setOnRefreshListener { fetchSlots() }
    loadContentSlots(DataCaching(context).getContentSlots())
}

}

2 个答案:

答案 0 :(得分:0)

您必须在第一个构造函数中为mList添加一个默认值,或者在第二个构造函数中添加一个StoreViewMap参数

答案 1 :(得分:0)

您通过调用this(context)来调用自己的构造函数,这意味着如果定义构造函数参数,则调用构造函数将忽略它们。

constructor(context: Context) : this(context, null)

constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs)

在这里,第一个构造函数正在调用第二个,而第二个构造函数正在调用第三个,但是第三个构造函数在您的类中调用继承的类LinearLayout的构造函数。

解决方案是创建第四个构造函数,并向其中添加您想要的参数:

constructor(context: Context, mlist: StoreViewMap, _listener: OnFragmentInteractionListener, _position: Int) : this(context){
    // your code
}

此构造函数将调用第一个构造函数