{"id":2154,"date":"2021-02-11T11:05:00","date_gmt":"2021-02-11T11:05:00","guid":{"rendered":"https:\/\/www.javiercarrasco.es\/?p=2154"},"modified":"2021-02-11T11:05:00","modified_gmt":"2021-02-11T11:05:00","slug":"view-binding","status":"publish","type":"post","link":"https:\/\/www.javiercarrasco.es\/?p=2154","title":{"rendered":"View Binding"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Si ya eres conocedor de Android, conocer\u00e1s <em>findViewById<\/em>, que permite vincular las vistas de la aplicaci\u00f3n con las clases, y as\u00ed poder acceder a determinadas propiedades de los <em>widgets<\/em> de las vistas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Desde la versi\u00f3n 3.6 de <em>Android Studio<\/em>, es posible utilizar <em>View Binding<\/em> para enlazar los elementos de los <em>layouts<\/em> con las clases. Este sistema ofrece una mayor seguridad frente a nulos, ya que establece referencias directas, evitando as\u00ed los punteros nulos. Tambi\u00e9n garantiza la seguridad de tipos, esto quiere decir que cada campo de cada clase tendr\u00e1 tipo correcto de la vista a la que hace referencia en el fichero XML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como seguramente ya est\u00e9s trabajando con una versi\u00f3n de <em>Android Studio<\/em> superior a la 4.0, para habilitar el uso de <em>View Binding<\/em> deber\u00e1s a\u00f1adir las siguientes l\u00edneas en el fichero <em><strong>build.gradle<\/strong><\/em> a nivel de <em><strong>Module:app<\/strong><\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Android Gradle Plugin 4.0\nbuildFeatures {\n    viewBinding = true\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tras sincronizar el <em>Gradle<\/em>, se har\u00e1 uso de la nueva funcionalidad, se har\u00e1 el <em>binding<\/em>. Observa como se inflar\u00eda la <em>activity main<\/em> en su clase.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MainActivity : AppCompatActivity() {\n\n    private lateinit var binding: ActivityMainBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivityMainBinding.inflate(layoutInflater)\n        setContentView(binding.root)\n        ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Observa el uso de <em><strong>lateinit<\/strong><\/em> para poder inicializar la variable llegado el momento, en este caso, se inicia en el m\u00e9todo <em><strong>onCreate()<\/strong><\/em>. Como dato interesante, f\u00edjate en el tipo de clase, <em><strong>ActivityMainBinding<\/strong><\/em>, se llama as\u00ed debido a que hace referencia a <em>activity_main.xml<\/em>. Si el fichero se llamase <em>referencias_layout.xml<\/em>, la clase ser\u00eda <em>ReferenciasLayoutBinding<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora ya puedes acceder a cualquier vista del <em>layout<\/em> haciendo referencia al <em>binding<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>binding.btHello.setOnClickListener { sayHello() }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Espero que te sirva de ayuda, au!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si ya eres conocedor de Android, conocer\u00e1s findViewById, que permite vincular las vistas de la aplicaci\u00f3n con las clases, y as\u00ed poder acceder a determinadas propiedades de los widgets de las vistas. Desde la versi\u00f3n 3.6 de Android Studio, es posible utilizar View Binding para enlazar los elementos de los layouts con las clases. Este [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[13,45,73,85,106,131],"class_list":["post-2154","post","type-post","status-publish","format-standard","hentry","category-cuaderno-dev","tag-android","tag-findviewbyid","tag-kotlin","tag-moviles","tag-programacion","tag-view-binding"],"_links":{"self":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts\/2154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2154"}],"version-history":[{"count":0,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts\/2154\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}