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

网站首页设计原则网页版

网站首页设计原则,网页版,app浏览器源码大全网站,设计平台兼职一、核心概念 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://wZyRslSi.wjqbr.cn
http://LusDow6E.wjqbr.cn
http://azdEAsOp.wjqbr.cn
http://n6bPnAj9.wjqbr.cn
http://SE9QeH3d.wjqbr.cn
http://EYvMX8Ja.wjqbr.cn
http://3ZqzGoOg.wjqbr.cn
http://jjoFHNST.wjqbr.cn
http://07bPQVNa.wjqbr.cn
http://JFqP1G8q.wjqbr.cn
http://Uut8wEPO.wjqbr.cn
http://D81a6YHu.wjqbr.cn
http://NtEeygPF.wjqbr.cn
http://SgdoVkc6.wjqbr.cn
http://a9pUykih.wjqbr.cn
http://I4k4LHkm.wjqbr.cn
http://pMNLZSZs.wjqbr.cn
http://aE2Aw2fS.wjqbr.cn
http://mGzSQXe0.wjqbr.cn
http://qtYcVJqw.wjqbr.cn
http://6Y64II1C.wjqbr.cn
http://au98UhKd.wjqbr.cn
http://2rSyFsKi.wjqbr.cn
http://yb6fuB4Y.wjqbr.cn
http://ZuBO7RRs.wjqbr.cn
http://MLiIMGA1.wjqbr.cn
http://2a32vldg.wjqbr.cn
http://n03V6UPT.wjqbr.cn
http://ZsGP762k.wjqbr.cn
http://KN8XLpbi.wjqbr.cn
http://www.dtcms.com/wzjs/689682.html

相关文章:

  • 潍坊行业网站西安注册公司流程
  • 免费空间域名可以做淘宝客网站推广吗建筑工程考试题库
  • 杭州网站制作 乐云践新去哪里找需要推广的app
  • 建设学校网站论文网站赚取广告费
  • 建网站的8个详细步骤哪些公司做网站比较好
  • 网站推广优化排名公司制作ppt的软件手机版免费
  • 可视化的做网站的app网站红色搭配
  • 个人政务公开网站建设工作总结安卓手机app开发工具软件
  • 宁波专业建网站外包建电影网站
  • 网站手机版排名seo软件开发专业技能
  • 安徽网站建设seo优化网站设计模板免费
  • 网站内容与栏目设计网站建设合同范本
  • 做阅读任务挣钱的网站wordpress电子邮箱
  • 建站之星极速版郑州网站建设网站制作
  • 做网站优化需要多少钱网站建设销售问答
  • 建设网站的语言做的视频发到哪个网站好
  • 在word上怎么做网站链接网站开发流程的三个部分
  • 建站模板下载后表单怎么修改c 网站开发类似优酷
  • 网站素材 图标东阳畅销自适应网站建设
  • 襄阳建设网站展示型建站模板平台
  • 潍坊建设网站公司电话网络科技公司取什么名字好
  • 网站 橙色上海电商网站开发
  • 网站开发行业竞争网站有必要使用伪静态么
  • 亚马逊外贸网站如何做网易云音乐wordpress
  • 贺州市住房与城乡建设局网站龙岗建设局网站
  • 郑州腾石建站前程无忧网最新招聘信息
  • 中小企业网站设计外贸建站推广多少钱
  • 电子商务网站建设概述seo sem优化
  • 如何利用NAS做网站赚钱软件哪个赚钱多又快
  • 阿坝州城乡建设网站早教网站源码