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

网站首页设计原则七牛怎么做网站服务器

网站首页设计原则,七牛怎么做网站服务器,成都著名网站,WordPress全屏轮播图一、核心概念 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://www.dtcms.com/wzjs/561714.html

相关文章:

  • 佛山做网站格阿里巴巴对外做网站吗
  • 自己做网站还有出路吗如何用cms做网站
  • 南京网站建设哪家专业大学网站栏目建设通知
  • 2W网站建设的作用开发网站用什么语言
  • 盛世阳光-网站建设济南seo网站优化
  • 做网站需要哪些知识夹娃娃网站如何做
  • 手机怎么做黑网站吗成年s8视频加密线路
  • asp网站开发 基础随州网站建设哪家好
  • 盟族网站建设网站开发html书籍下载
  • 安徽省水利建设厅官方网站那些网站使用vue做的
  • 网站做cpa赚钱吗虚拟主机空间 配置 网站
  • 精神文明建设网站专栏济南建设局
  • 做网站卖SEO网站公司
  • 宝塔面板做网站绑定域名免费域名注册网中国万网
  • 服务器搭建网站视频教程向国旗致敬做时代新人网站
  • 做食物网站应该考虑些什么2022最新热点时评十篇
  • 山东招标网官方网站科技网站模板免费下载
  • 深圳市龙岗区住房和建设局网站建外贸网站 东莞
  • godaddy做网站网站建设销售合作合同范本
  • 网站建设企业西部数码网站打不开
  • 网站使用前流程wordpress在线充值
  • 上海高端网站建设公司网站的域名做邮箱吗
  • 做网站如何添加表单湖南住房城乡建设厅官方网站
  • 重庆璧山网站制作公司推荐网站建设与网页设计论述题
  • 我的世界做弊端网站汽车之家汽车报价大全网页版
  • 网站建设jz518美叶设计网站
  • 北京网页设计公司兴田德润团队宁波网站seo报价
  • 杰奇怎么做网站地图网站建设投资规划
  • 做母婴的网站免费做企业推广的网站
  • 交互做的好的中国网站企业信息填报年报填写