当前位置: 首页 > wzjs >正文

网站主题制作360提交网站备案

网站主题制作,360提交网站备案,为国外的公司提供网站建设 维护,廊坊企业自助建站一、核心概念 ViewBinding 是 Android Jetpack 组件,用于替代传统 findViewById,提供类型安全和空安全的视图访问方式。它会在编译时为每个 XML 布局文件生成绑定类,直接映射视图 ID。 // 传统方式 vs ViewBinding val textView findViewB…

一、核心概念

ViewBinding 是 Android Jetpack 组件,用于替代传统 findViewById,提供类型安全空安全的视图访问方式。它会在编译时为每个 XML 布局文件生成绑定类,直接映射视图 ID。

// 传统方式 vs ViewBinding
val textView = findViewById<TextView>(R.id.tv_title)  // 传统
binding.tvTitle.text = "Hello ViewBinding"            // ViewBinding

二、ViewBinding优点

  1. 类型安全:自动匹配视图类型,避免类型转换错误

  2. 空安全:生成的视图引用永不为 null(除非布局中不存在)

  3. 编译时检查:XML-ID 错误在编译时暴露,而非运行时崩溃

  4. 代码简洁:消除模板代码,提升可读性

  5. 性能优化:编译时生成代码,零运行时开销

三、使用流程

1. 启用 ViewBinding (模块级 build.gradle)
android {buildFeatures {viewBinding true}
}
2. 自动生成的绑定类

布局文件:activity_main.xml

<LinearLayout><TextView android:id="@+id/tvHeader" /><Button android:id="@+id/btnSubmit" />
</LinearLayout>

将生成绑定类:ActivityMainBinding.java

public final class ActivityMainBinding {public final TextView tvHeader;public final Button btnSubmit;...
}
3. Activity 中使用
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)  // 关键:设置根视图// 直接访问视图binding.tvHeader.text = "Welcome"binding.btnSubmit.setOnClickListener {// 处理点击事件}}
}
4. Fragment 中使用
class HomeFragment : Fragment() {private var _binding: FragmentHomeBinding? = nullprivate val binding get() = _binding!! // 安全解包override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View {_binding = FragmentHomeBinding.inflate(inflater, container, false)return binding.root}override fun onDestroyView() {super.onDestroyView()_binding = null  // 防止内存泄漏}
}
5. 自定义视图组件中使用
class CustomView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null
) : LinearLayout(context, attrs) {private val binding = CustomViewBinding.inflate(LayoutInflater.from(context), this, true)init {binding.tvLabel.text = "Custom Component"}
}

四、与 DataBinding 对比

特性ViewBindingDataBinding
核心目的视图访问数据绑定 + 视图访问
布局变量支持❌ 不支持✅ 支持
表达式语言❌ 不支持✅ 支持
双向绑定❌ 不支持✅ 支持
性能开销⚡️ 零运行时开销⚠️ 有运行时开销
启用复杂度✅ 简单⚠️ 需额外配置
适用场景纯视图访问数据驱动UI

五、实践使用

  1. 空安全处理:Fragment 中使用解包模式

    private val binding get() = _binding!! 

  2. 多模块支持:在公共模块声明通用绑定

    interface BindableFragment<B : ViewBinding> {val binding: B
    }
  3. 适配器中使用:RecyclerView.ViewHolder 示例

    class UserViewHolder(val binding: ItemUserBinding) : RecyclerView.ViewHolder(binding.root) {fun bind(user: User) {binding.tvName.text = user.name}
    }
  4. 包含布局处理:合并 <include> 标签

    <include android:id="@+id/toolbar"layout="@layout/toolbar" />
    binding.toolbar.tvTitle.text = "Home"  // 直接访问子视图

六、问题解决方案

场景1:忽略某些布局文件

<LinearLayouttools:viewBindingIgnore="true">  <!-- 在根布局添加 -->

场景2:处理可选视图

<LinearLayouttools:viewBindingIgnore="true">  <!-- 在根布局添加 -->

场景3:兼容旧项目

// 与传统findViewById共存
val oldView = findViewById<TextView>(R.id.legacy_view)
binding.modernView.text = "New Approach"

七、性能分析

  1. 编译时生成:无运行时反射开销

  2. 内存占用:绑定对象仅存储视图引用

  3. Benchmark 数据

    • 视图访问速度比 findViewById 快 2-3 倍

    • 内存开销比 DataBinding 低 40%


文章转载自:

http://WqNFnF67.mkydt.cn
http://hqKIZfuu.mkydt.cn
http://EjWHNwc9.mkydt.cn
http://77LGT2L1.mkydt.cn
http://RIKtaEou.mkydt.cn
http://7l2g4jLM.mkydt.cn
http://9o6hsq12.mkydt.cn
http://XfRlN7Ls.mkydt.cn
http://Xr6FjhIQ.mkydt.cn
http://YvX55LcB.mkydt.cn
http://H2uyTA0z.mkydt.cn
http://QNhIfYFM.mkydt.cn
http://AwWxS2yX.mkydt.cn
http://LpdHY14s.mkydt.cn
http://FDN8WOlY.mkydt.cn
http://n2KS4xZI.mkydt.cn
http://qjzQBSY7.mkydt.cn
http://qivfUjER.mkydt.cn
http://JxQQVl9V.mkydt.cn
http://vXEuneFH.mkydt.cn
http://AtFzrmSE.mkydt.cn
http://iM70vUWp.mkydt.cn
http://d8yVDpMI.mkydt.cn
http://VGX9s2dp.mkydt.cn
http://QOoXa0b2.mkydt.cn
http://Yeb2pJEk.mkydt.cn
http://4p6NSXze.mkydt.cn
http://MWJWDM1G.mkydt.cn
http://iL0eMAcA.mkydt.cn
http://mvbMg3hr.mkydt.cn
http://www.dtcms.com/wzjs/727051.html

相关文章:

  • 粉色大气妇科医院网站源码泰安钢管网站建设
  • 制冷设备东莞网站建设影院禁止18岁以下观众入内
  • 适合网站开发的python自己用电脑做虚拟机怎么建网站
  • 郑州建筑公司网站建设联通网站服务器
  • 关于网站建设的pptwordpress简体中文版
  • 椒江哪里可以做公司网站wordpress站长地图
  • html5创意网站wordpress标题间隔符修改
  • 高端html5网站建设织梦模板 dedecms5.7织梦网络公司源怎么创建网页链接快捷方式
  • 影视网站模板怎么做wordpress sqlite3
  • 网上发布信息的网站怎么做的最新73种暴利产品竞价单页网站制作带订单后台系统模板
  • 怎么用百度云做网站空间网页设计与制作的公司
  • 中国网站建设集团wordpress编辑器还原
  • 网站导入网站备案号收回
  • python网站开发高并发wordpress 禁用头像
  • 定制企业网站建设哪家好现成的ppt大全
  • 外国网站界面电商代运营公司怎么样
  • 做网站上传资源海丰网站制作
  • 做设计用的素材下载网站有哪些知名的中小企业有哪些
  • 更换网站首页模板怎么做alexa世界排名查询
  • 网站建设专业特长东莞前10大互联网公司
  • 查询网站是哪家公司做的python网站开发工程师
  • 织梦网站怎么上传视频温州网站建设seo
  • 地铁建设单位网站it需要什么学历
  • 网站服务器信息查询网站推广的方式手段有哪些
  • 深圳网站建设 设计科技有限公司海珠一站式网站建设
  • 搜索网排名济南seo排名搜索
  • 怎么用网站做文案萍乡网站建设行吗
  • 网站后台有些不显示苏州的网络企业
  • 租号网站怎么做的wordpress防恶意注册
  • 网站建设公司哪家好该如何选择张家界市建设网站