Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • Android Extensions 与 View Binding/Data Binding

Android Extensions 与 View Binding/Data Binding

1. Kotlin Android Extensions(已废弃,了解历史背景)

1.1 基本概念

  • 功能:Kotlin Android Extensions 是 Kotlin 团队早期提供的插件,允许直接通过视图 ID 访问布局中的控件,无需 findViewById()。
  • 依赖配置(旧版本):
    apply plugin: 'kotlin-android-extensions'
    

1.2 使用示例

// 直接使用布局文件中的视图 ID(如 activity_main.xml 中的 TextView)
textView.text = "Hello Kotlin"

1.3 废弃原因

  • 问题:类型不安全、易导致空指针异常。
  • 替代方案:Google 推荐使用 View Binding 或 Data Binding。

2. View Binding

2.1 启用与配置

在 build.gradle 中启用:

android {
    viewBinding {
        enabled = true
    }
}

2.2 核心特性

  • 自动生成绑定类:为每个 XML 布局生成 Binding 类(如 ActivityMainBinding)。
  • 空安全:仅绑定已存在的视图。
  • 编译时检查:避免运行时错误。

2.3 使用示例

// Activity 中使用
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    
    binding.textView.text = "View Binding Example"
}

3. Data Binding

3.1 启用与配置

在 build.gradle 中启用:

android {
    dataBinding {
        enabled = true
    }
}

3.2 核心功能

  • 双向绑定:将数据模型(如 ViewModel)与 UI 自动同步。
  • 表达式支持:在 XML 中使用 Kotlin 表达式(如 @{user.name})。
  • 事件绑定:直接在 XML 中定义点击事件。

3.3 使用示例

3.3.1 布局文件(activity_main.xml)

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.example.User" />
    </data>
    <TextView
        android:text="@{user.name}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</layout>

3.3.2 Activity 中绑定数据

val binding: ActivityMainBinding = DataBindingUtil.setContentView(
    this, R.layout.activity_main
)
binding.user = User("Kotlin Developer")

4. 对比与选型建议

特性View BindingData Binding
复杂度简单较高(需学习数据绑定语法)
性能更轻量稍慢(编译时生成更多代码)
适用场景仅需视图绑定需要数据驱动 UI 或双向绑定
XML 表达式支持不支持支持

推荐:

  • 简单项目:优先使用 View Binding。
  • MVVM 架构:选择 Data Binding 结合 ViewModel 和 LiveData。

5. 常见问题

Q1:如何处理包含 <include> 的布局?

  • View Binding:通过 <include> 标签的 bind 属性传递绑定对象。
  • Data Binding:直接在 XML 中使用变量传递。

Q2:如何与 RecyclerView 结合?

// View Binding 示例
class ViewHolder(private val binding: ItemUserBinding) : RecyclerView.ViewHolder(binding.root) {
    fun bind(user: User) {
        binding.user = user
    }
}

提示:从 Android Studio 3.6 开始,View Binding 成为官方推荐方案,替代 Kotlin Android Extensions。

Last Updated:: 5/21/25, 7:58 PM