IV . 视图绑定 ( ViewBinding ) 关联 Activity 界面
1 . 两种获取组件方式 : 上面的示例代码中 , 分别使用 findViewById(R.id.text_view) 获取的组件 和 ActivityMainBinding 获取组件 ; 但是使用 ActivityMainBinding 获取组件无法修改界面 ;
2 . ActivityMainBinding 获取的组件无法控制界面 , 这是因为该 ActivityMainBinding 视图绑定类 , 并没有与 Activity 关联 ;
3 . 界面布局分析 : 设置界面布局的代码是 setContentView(R.layout.activity_main) , 此处将 activity_main.xml 布局设置给了 Activity 显示 , 该布局的视图组件与 ActivityMainBinding 没有任何关联 , Activity 显示的组件也不是 ActivityMainBinding 绑定类中的组件 , 因此操作视图绑定类中的组件不能修改 Activity 界面的显示 ;
4 . 如果要显示需要将 ActivityMainBinding 根视图设置给 Activity 显示 , 进行如下操作 ;
/* 获取 视图绑定 对象 生成绑定类 : 需要传递 LayoutInflater 参数 , 可以直接调用 Activity 的 getLayoutInflater() 方法获取 */ ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); /* ActivityMainBinding 绑定类自带 getRoot() 方法 可以直接获取到 布局文件的 根视图 这里可以直接将根视图传递给 setContentView 函数作为参数 , 即可在该 Activity 中显示该布局 */ setContentView(binding.getRoot());
5 . 关联界面操作 : setContentView(binding.getRoot()) 操作就是将视图绑定类与 Activity 界面关联了起来 , 此时操作视图绑定类就可以修改界面内容了 ;
V . 视图绑定 ( ViewBinding ) 本质分析
视图绑定 ( ViewBinding ) 其本质就是提供了一种加载布局文件的便捷方式 , 与下面的操作本质是类似的 , 只是可以省略很多代码 ;
① 布局加载操作 :
//加载布局文件 View view = LayoutInflater.from(context) .inflate(R.layout.activity_main, parent, false); //查找布局文件中的组件 TextView textView = view.findViewById(R.id.text_view);
② 视图绑定操作 :
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); TextView textView = binding.textView;
VI . GitHub 代码地址
GitHub 代码地址 : https://github.com/han1202012/002_JetPack_ViewBinding_Apply