如何在Kotlin的RecyclerView的自定义适配器中调用setColorFilter?

时间:2018-11-26 01:04:34

标签: android android-recyclerview kotlin

我正在Kotlin中创建一个Android应用程序,该应用程序使用RecyclerView来显示数据库中的数据,因此我创建了一个自定义适配器,该适配器可从光标中检索数据并创建必须在RecyclerView上显示的每个项目。

问题是,我需要向ImageView添加一个滤色器(使用Vector资产显示相应的图标),但是当我尝试在onBindViewHolder内为ImageView设置滤色器时,出现错误消息:< / p>

  

元组'ColorFilter!'的表达'colorFilter'!不能作为函数调用。找不到函数“ invoke()”。

我已经在Java中为其他应用程序完成了此操作,并且工作正常,但我的kotlin无法正常工作,那么如何在自定义适配器中为ReclyclerView应用滤色器?

这是我的代码:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
cursor.moveToPosition(position)
val medicineType = cursor.getString(cursor.getColumnIndexOrThrow(MMDContract.columnas.TIPO_MEDICAMENTO))

when(iconsCollection?.indexOf(medicineType)){
    0 -> {holder.icono.setImageResource(R.drawable.ic_roundpill)}
    1 -> {holder.icono.setImageResource(R.drawable.ic_tab)}
    2 -> {holder.icono.setImageResource(R.drawable.ic_capsula)}
    3 -> {holder.icono.setImageResource(R.drawable.ic_syrup)}
    4 -> {holder.icono.setImageResource(R.drawable.ic_drops)}
    5 -> {holder.icono.setImageResource(R.drawable.ic_eyedrops)}
    6 -> {holder.icono.setImageResource(R.drawable.ic_ointment)}
    7 -> {holder.icono.setImageResource(R.drawable.ic_powder)}
    8 -> {holder.icono.setImageResource(R.drawable.ic_gel)}
    9 -> {holder.icono.setImageResource(R.drawable.ic_inhalator)}
    10-> {holder.icono.setImageResource(R.drawable.ic_suppository)}
    11-> {holder.icono.setImageResource(R.drawable.ic_intravenous)}
    12-> {holder.icono.setImageResource(R.drawable.ic_syringe)}
}

holder.icono.colorFilter(ContextCompat.getColor(holder.itemView.context,R.color.flamingo)

holder.NombreComercial.text = cursor.getString(cursor.getColumnIndexOrThrow(MMDContract.columnas.NOMBRE_COMERCIAL_MEDICAMENTO))
holder.NombreGenerico.text = cursor.getString(cursor.getColumnIndexOrThrow(MMDContract.columnas.NOMBRE_GENERICO_MEDICAMENTO))
}

color filter in on RecyclerView

1 个答案:

答案 0 :(得分:0)

解决:

 holder.icono.setColorFilter(cursor.getInt(cursor.getColumnIndexOrThrow(MMDContract.columnas.COLOR_MEDICAMENTO)))