• 7
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

my extension function for TextView:

fun TextView.setColorifiedText(text : String) {
 // Some logic to change color of text
 setText(text)
}

my xml file with databinding:

<layout>
   <data>
      <!--some data-->
   </data>
   <LinearLayout>
      <TextView 
        android:setColorifiedText="some text to be colorified"
      />
   </LinearLayout>
</layout>
      • 2
    • Or, if you make the extension function be a binding adapter function, it is supposed to work. I haven't tried it yet, but Yi?it mentioned it in the "fireside chat" session at the 2018 Android Developer Summit. Since extension functions are implemented as static Java methods (for Kotlin/JVM), apparently adding the @BindingAdapter annotation was sufficient for it to "just work".
      • 1
    • as @CommonsWare mentions, if you annotate the method with @BindingAdapter("android:setColorifiedText"), then you can use it in xml as ` android:setColorifiedText="@{some text to be colorified}"` (one note though, if you use custom binding adapters, I'd have prefix app:, so it doesn't clash with android's setters)
    • @CommonsWare I annotated the method with @BindingAdapter and I am getting an error stating: {****/ data binding error ****msg:Cannot find the setter for attribute 'app:setColorifiedText' with parameter type androidx.lifecycle.LiveData on android.widget.TextView.}

Yes, it is possible to access an extension function written for a view in XML.

We have prefix the extension function name with 'set' and annotate it with 'BindingAdapter' annotation., for ex:- if your extension function name is 'colorText' change it to 'setColorText' and access the same in XML with the attribute name 'colorText' from 'app:' namespace. Also, annotate the extension function with @BindingAdapter("colorText")

@BindingAdapter("colorText")
fun TextView.setColorText(text : String) {
   // logic to something with the text
}

in XML :

<TextView
   app:colorText="your String" />

you can also modify the code using the kotlin's setter getter to advantage

In case of java declare the function as static and add an argument to the method which gets reference to the textview you gave the attribute to.

  • 1
Reply Report