bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android_bindings

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Següent revisió
Revisió prèvia
android_bindings [2025/01/20 16:06]
enric_mieza_sanchez creat
android_bindings [2025/01/20 19:00] (actual)
enric_mieza_sanchez [View Bindings en Fragment]
Línia 1: Línia 1:
 ====== Android Bindings ====== ====== Android Bindings ======
 +
 +ViewBindings és un mecanisme que facilita l'accés a les views des del codi de l'app Android.
 +
 +
 +Referències:
 +  * [[https://developer.android.com/topic/libraries/view-binding|View Binding]].
 +  * [[https://developer.android.com/topic/libraries/view-binding?hl=es-419|Vinculación de vista (en castellà)]].
 +
 +{{tag> #Dam #DamMp08 #DamMp08Uf2 #DamMp08Uf02 #DamMp08Uf2 Android mobile java kotlin }}
 +
 +\\
 +
 +====== Objectiu i exemple ======
 +
 +La idea dels //view bindings// és substituir les crides amb //dynamic cast// que poden retornar un valor erroni i resultar en excepcions tiupus ''NullPointerException'' o similars.
 +
 +El què habitualment resoldríem amb un ''findViewById'':
 +<code kotlin>
 +val button = findViewById<Button>(R.id.button)
 +button.setOnClickListener {
 +   val toSpeak = binding.parlaText.text.toString()
 +   tts.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null)
 +}
 +</code>
 +
 +Ara es resoldrà amb una crida directa a la jerarquia d'objectes de la //view//:
 +<code kotlin>
 +binding.button.setOnClickListener {
 +    val toSpeak = binding.parlaText.text.toString()
 +    tts.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null)
 +}
 +</code>
 +
 +El compilador i l'IDE seran capaços de detectar errors mitjançant la inferència de tipus, facilitant la claredat i seguretat del codi.
  
 \\ \\
  
 ===== View Bindings en Activity ===== ===== View Bindings en Activity =====
 +
 +Per poder emprar els //view bindings// caldrà modificar els arxius:
 +  * build.gradle.kts
 +  * MainActivity.kt
  
 <file kotlin build.gradle.kts> <file kotlin build.gradle.kts>
Línia 16: Línia 54:
  
 <file kotlin MainActivity.kt> <file kotlin MainActivity.kt>
 +package com.usuari.lamevaapp
 // ... // ...
 import com.usuari.lamevaapp.databinding.ActivityMainBinding import com.usuari.lamevaapp.databinding.ActivityMainBinding
Línia 39: Línia 78:
  
 ===== View Bindings en Fragment ===== ===== View Bindings en Fragment =====
 +
 +<code kotlin TTSFragment.kt>
 +package com.usuari.lamevaapp
 +// ULL: si es posa TTS en majúscules no ho reconeix bé, ha de ser camel case
 +import com.usuari.lamevaapp.databinding.FragmentTtsBinding
 +
 +class TTSFragment : Fragment() {
 +    private var _binding: FragmentTtsBinding? = null
 +    private val binding get() = _binding!!
 +
 +    override fun onCreateView(
 +        inflater: LayoutInflater, container: ViewGroup?,
 +        savedInstanceState: Bundle?
 +    ): View? {
 +        // Inflate the layout for this fragment
 +        _binding = FragmentTtsBinding.inflate(inflater, container, false)
 +        
 +        // ...
 +    }
 +    
 +    //...
 +}
 +
 +</code>
  
 \\ \\
  
  
android_bindings.1737389185.txt.gz · Darrera modificació: 2025/01/20 16:06 per enric_mieza_sanchez