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ó

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
android_bindings [2025/01/20 16:14]
enric_mieza_sanchez [Android Bindings]
android_bindings [2025/01/20 19:00] (actual)
enric_mieza_sanchez [View Bindings en Fragment]
Línia 9: Línia 9:
  
 {{tag> #Dam #DamMp08 #DamMp08Uf2 #DamMp08Uf02 #DamMp08Uf2 Android mobile java kotlin }} {{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 25: 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 48: 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.1737389668.txt.gz · Darrera modificació: 2025/01/20 16:14 per enric_mieza_sanchez