Skip to content

Latest commit

 

History

History
87 lines (66 loc) · 2.47 KB

File metadata and controls

87 lines (66 loc) · 2.47 KB

← Back to main index | ← Back to folder


35. Data Binding & View Binding Best Practices

ViewBinding (Type-Safe Views)

Tip

Enable viewBinding true in build.gradle. Use generated Binding classes instead of findViewById(). Type-safe, null-safe, no reflection.

Type-safe · Null-safe · Compile-time checking · No reflection

💻 Code Example
android { buildFeatures { viewBinding true } }

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.button.setOnClickListener { binding.text.text = "Clicked!" }
    }
}

class MyFragment : Fragment() {
    private var _binding: FragmentMyBinding? = null
    private val binding get() = _binding!!
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, saved: Bundle?): View {
        _binding = FragmentMyBinding.inflate(inflater, container, false)
        return binding.root
    }
    override fun onDestroyView() { super.onDestroyView(); _binding = null }
}

Data Binding (Two-Way Binding)

Tip

Use <data> block in layout XML to bind variables + event handlers. Automatic UI updates when ViewModel data changes. Two-way binding with @={...}.

Data binding expressions · Event handlers · Two-way binding · Declarative UI

💻 Code Example
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.example.User" />
        <variable name="handler" type="com.example.Handler" />
    </data>
    <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent">
        <TextView android:text="@{user.name}" />
        <Button android:onClick="@{handler::onButtonClick}" />
    </LinearLayout>
</layout>
💻 Code Example
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        binding.user = User("Alice")
        binding.handler = MyClickHandler()
    }
}