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

毕业设计代做网站都可信么商城网站前台html

毕业设计代做网站都可信么,商城网站前台html,牡丹江在哪个城市,系统模板html文章目录 ViewBinding使用方法1.build.gradle中开启2.代码中使用普通ActivityFragmentAdapterinclude View Binding 的传统使用方式与findViewById的区别与DataBinding的对别 ViewBinding ViewBinding是Google在2019年I/O大会上公布的一款Android视图绑定工具#xff0c;在And… 文章目录 ViewBinding使用方法1.build.gradle中开启2.代码中使用普通ActivityFragmentAdapterinclude View Binding 的传统使用方式与findViewById的区别与DataBinding的对别 ViewBinding ViewBinding是Google在2019年I/O大会上公布的一款Android视图绑定工具在Android Studio 3.6中添加的一个新功能更准确的说它是DataBinding的一个更轻量变体 使用方法 1.build.gradle中开启 在build.gradle文件中的android节点添加如下代码: android {...buildFeatures {viewBinding true} }重新编译后系统会为每个布局文件生成对应的Binding类该类中包含对应布局中具有id的所有视图的直接引用。 如果项目中存在多个模块则需要在每个模块的build.gradle文件中都加上该配置。 假设某个布局文件的名称为result_profile.xml所生成的绑定类的名称就为ResultProfileBinding。 如果布局中的控件没有ID那么绑定类中不存在对它的引用。 每个绑定类还包含一个 getRoot() 方法用于为相应布局文件的根视图提供直接引用。 如果你希望在生成绑定类时忽略某个布局文件可以将tools:viewBindingIgnoretrue属性添加到相应布局文件的根视图中: LinearLayout...tools:viewBindingIgnoretrue ... /LinearLayout2.代码中使用 普通Activity class SplashActivity : BaseActivity() {private lateinit var binding: ActivitySplashBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivitySplashBinding.inflate(layoutInflater)setContentView(binding.root)// mtv为xml中定义的idbinding.mtv.text fuck the world} }Fragment 在Fragment中我们需要进行额外的工作来避免内存泄漏方法是在onDestroyView方法中将ViewBinding引用设置为null。 具体如下: class HomeFragment : Fragment() {private var _binding: HomeFragmentBinding? null// 只在onCreateView和onDestroyView之间有效private val binding get() _binding!!override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {_binding ResultProfileBinding.inflate(inflater, container, false)return binding.root}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)binding.tvHelloWorld.text Hello Android!}override fun onDestroyView() {super.onDestroyView()_binding null} }这里使用了两个不同的变量并且在onDestroyView()中将_binding变量设置为null。 这是因为碎片的生命周期与活动的生命周期不同并且碎片有着比它们的视图更长的生命周期所以如果我们不将其设置为null可能会发生内存泄漏。 另一个变量用于避免使用进行空检查通过使一个变量可以为null而另一个变量不为null。 Adapter 还有在Adapter中的使用因为布局不是只创建一次而是每个item都会创建不能像上面那样在Adapter里写一个binding全局变量不然binding只会得到最后一次创建的视图。所以binding对象应该是给ViewHolder持有。具体如下: class TextAdapter(private val list: ListString) : RecyclerView.AdapterTextAdapter.TextViewHolder() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TextViewHolder {val binding ItemTextBinding.inflate(LayoutInflater.from(parent.context), parent, false)//在生成时先给binding赋值然后传参给ViewHolder的构造器return TextViewHolder(binding)}override fun onBindViewHolder(holder: TextViewHolder, position: Int) {val content list[position]holder.binding.tvContent.text content}override fun getItemCount() list.sizeclass TextViewHolder(val binding : ItemTextBinding) : RecyclerView.ViewHolder(binding.root) }include ViewBinding同样可以被用于include中。 需要对include指定id通过id来获取,例如: ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroidx.appcompat.widget.Toolbarandroid:idid/toolbarandroid:layout_width0dpandroid:layout_height?actionBarSizeandroid:background?colorPrimaryapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent //androidx.constraintlayout.widget.ConstraintLayout?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentincludeandroid:idid/appbarlayoutlayout/app_barapp:layout_constraintTop_toTopOfparent //androidx.constraintlayout.widget.ConstraintLayoutoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val binding: MainLayoutBinding MainLayoutBinding.inflate(layoutInflater)setContentView(binding.root)setSupportActionBar(binding.appbar.toolbar)//不多说}View Binding 的传统使用方式 创建和销毁viewBinding的样板代码如果有很多Fragment,每一个都要拷贝一份相同的代码viewBinding 属性是可空的并且可变的这可不太妙 而且使用起来不方便我们希望用更简单的方式,例如: class MainActivity : AppCompatActivity() {private val binding by viewBinding(ActivityMainBinding::inflate) }怎么办呢用强大Kotlin委托来重构它。通过属性委托可以自动执行inflate()方法和setContentView()方法。 与findViewById的区别 与使用 findViewById 相比视图绑定具有一些很显著的优点 Null 安全 由于视图绑定会创建对视图的直接引用因此不存在因视图ID无效而引发Null指针异常的风险。此外如果视图仅出现在布局的某些配置中则绑定类中包含其引用的字段会使用Nullable标记。类型安全 每个绑定类中的字段均具有与它们在XML文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。 这些差异意味着布局和代码之间的不兼容将会导致构建在编译时而非运行时失败。 与DataBinding的对别 ViewBinding与DataBinding均会生成可用于直接引用视图的绑定类。但是ViewBinding旨在处理更简单的用例与DataBinding相比具有以下优势: 更快的编译速度 视图绑定不需要处理注释因此编译时间更短。易于使用 视图绑定不需要特别标记的XML布局文件因此在应用中采用速度更快。在模块中启用视图绑定后它会自动应用于该模块的所有布局。 反过来与数据绑定相比视图绑定也具有以下限制: 视图绑定不支持布局变量或布局表达式因此不能用于直接在XML布局文件中声明动态界面内容。视图绑定不支持双向数据绑定。 考虑到这些因素在某些情况下最好在项目中同时使用视图绑定和数据绑定。您可以在需要高级功能的布局中使用数据绑定而在不需要高级功能的布局中使用视图绑定。
http://www.zqtcl.cn/news/658637/

相关文章:

  • 网站后期维修问题qq网站建设
  • 做网站不会框架网站开发逻辑图
  • 东莞网站制作个性化宜都网站建设
  • 空壳网站查询网络服务提供者不履行法律、行政法规
  • 付费阅读网站代码做网站需要什么软件
  • 泗阳网站设计外贸网站特点
  • 国外logo设计网站推荐网页浏览器证书失效怎么修复
  • asp.net建立手机网站校园网站设计代码
  • 网站图标怎么下载肇庆新农村建设内容在哪个网站
  • 上海建站哪家好临沂建设工程质量 监督网站
  • 中国建设银行网站地图上海最新新闻热点事件
  • wordpress4.95淘宝优化标题都是用什么软件
  • 大网站用wordpress吗网站广告费怎么做分录
  • 江西建设安全网站会展平面设计主要做什么
  • 阿里巴巴免费做网站吗企业商务网站建设策划书
  • 广州网站制作哪家专业深圳网站制作开发
  • 网站icp备案管理系统个人网站源代码
  • 西安网站建设公司云网wordpress 文章分类
  • 长沙优化网站服务r18cn wordpress
  • 建材网站设计延安网站建设电话
  • 做视频网站犯法么华为公司网站建设案例分析
  • 陕煤化建设集团网站矿建二公司网站制作系统
  • 网站建设类别wordpress下载付费
  • 廊坊做网站的成都网站建设网站建设
  • 如何自己开网站网络服务检测与维护
  • 古镇网站建设熊掌号专业网站开发哪里有
  • 专业做网站服务上海网站开发哪家好
  • 科普重庆网站浙江网站开发
  • 怎么搭建自己的网站后台邹城网站建设哪家好
  • 二手房在哪个网站做合同wordpress 局域网 慢