J'ai une mise en page avec quelques vues, l'une d'elles a l'identifiant title_whalemare
import kotlinx.Android.synthetic.main.controller_settings.*
import kotlinx.Android.synthetic.main.view_double_text.*
class MainSettingsController : BaseMvpController<MvpView, MvpPresenter>() {
val title: TextView = title_whalemare
override fun getLayout(): Int {
return R.layout.controller_settings
}
}
J'essaye de le trouver avec kotlin extensions
, mais je ne peux pas car j'obtiens l'erreur suivante
Aucun des candidats suivants n'est applicable en raison de l'inadéquation du type de récepteur
controller_settings.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/title_whalemare"/>
</LinearLayout>
Où est mon erreur?
Ce que l'erreur essaie de vous dire, c'est que vous ne pouvez accéder aux vues avec extensions qu'à partir d'un Activity
ou d'un Fragment
. C'est parce qu'il fait exactement la même chose pour trouver les vues avec les ID donnés que ce que vous feriez manuellement, il appelle simplement Activity.findViewById()
et Fragment.getView().findViewById()
, puis fait le type cast dans la sous-classe spécifique de View
. Je suppose que votre contrôleur n'est pas un Activity
ou Fragment
.
Il existe une autre façon d'utiliser les extensions, si vous pouvez en quelque sorte transmettre la vue racine de votre disposition à votre contrôleur. Ensuite, vous pouvez effectuer les opérations suivantes:
val title: TextView = rootView.title_whalemare
Encore une fois, cela remplace simplement l'appel View.findViewById()
et le type cast.