使用Anko获取类型不匹配错误需要AnkoContext <viewgroup>找到AnkoContext <context>

时间:2017-01-25 08:10:09

标签: android kotlin kotlin-android-extensions anko

我在一个基本的Android应用程序中使用Anko,我正在实现recyclerView。在onCreateViewHolder()方法中,我收到编译错误,指出类型不匹配。以下代码中的其他所有内容都很好。

class ListAdapter(val arrayList: ArrayList<String> = ArrayList<String>()) : RecyclerView.Adapter<Holder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder? {

        //type Mismatch error required AnkoContext<ViewGroup> Found AnkoContext<Context>
        return Holder(ItemUI().createView(AnkoContext.create(parent!!.context)))

    }

    override fun onBindViewHolder(holder: Holder, position: Int) {
        val item = arrayList.get(position)
        holder.bind(item)
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

}

class ItemUI : AnkoComponent<ViewGroup> {
    override fun createView(ui: AnkoContext<ViewGroup>): View {
        return with(ui) {

            verticalLayout {
                lparams(width = matchParent, height = dip(48))
                horizontalPadding = dip(16)

                var name=textView {
                    id = 7
                    singleLine = true
                    textSize = 16f
                }
                name.onClick {
                    toast("Hi,  ${name.text}!")
                }
            }
        }
    }
}

class Holder(itemView: View) : RecyclerView.ViewHolder(itemView){
    val name: TextView = itemView.find(1)

    fun bind(nm: String) {
        name.text = nm
    }
}

如果我使用错误的语法或recyclerview的执行错误,请告诉我

1 个答案:

答案 0 :(得分:2)

很抱歉迟到的答案,但只是浏览我的代码以及使用Anko的recyclerView适配器我注意到AnkoContext的创作者只有以下签名:

AnkoContext.create(ctx: Context, owner: ViewGroup, setContentView: Boolean = false)
AnkoContext.create(ctx: Context, setContentView: Boolean = false)

IDE(Android Studio)在您误会时强调该行。我使用了第一个:

AnkoContext.create(parent!!.context, parent)