Android 开发学习进程0.27 kotlin使用 和viewbinding的使用
kotlin-android-extensions 插件被废弃
笔者曾经尝试写过一部分的kotlin代码 主要是项目中一些代码是kotlin完成的,其中我认为 kotlin的kotlin-android-extensions 插件非常方便,甚至超过了需要插件的butterknife,但谷歌在最近AS4.1后宣布放弃使用kotlin-android-extensions插件,似乎是由于recyclerview的viewholder的原因。再加上butterknife作者似乎也不再更新,所以掌握viewbinding还是很有必要的。
viewbinding使用方式
在模块的gradle文件中androi结构下添加,注意Android studio版本要在3.6.0以上。
buildFeatures {
viewBinding true
}
AS 4.1之下可能是
viewBinding {
enabled = true
}
activity中使用
private lateinit var binding:ActivityMineBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMineBinding.inflate(layoutInflater)
setContentView(binding.root)
}
同时如果不想生成布局文件的辅助类,在布局文件根布局下添加 tools:viewBindingIgnore="true"
可以防止binding类生成
fragment中使用
class MainFragment : Fragment() {
private var _binding: FragmentMainBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentMainBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
这里需要解释下,同样是使用inflate函数,但在ondestroy时需要将binding置空,所以使用 ?来声明变量va_binding 使它可为空,同时 !! 表示不为空时执行的操作,如为空,可以抛出空异常。
同时其他的kotlin操作符还有 ?. 安全调用操作符,如 val l=b?.length 如b为空时,返回不会报错,返回空。
?: 变量在是否为空中选择一个结果
filterNotNull 可空元素集合中过滤出非空元素。
adapter中的简单使用
class FruitAdapter(val fruitList: List<Fruit>) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
inner class ViewHolder(binding: FruitItemBinding) : RecyclerView.ViewHolder(binding.root) {
val fruitImage: ImageView = binding.fruitImage
val fruitName: TextView = binding.fruitName
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = FruitItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val fruit = fruitList[position]
holder.fruitImage.setImageResource(fruit.imageId)
holder.fruitName.text = fruit.name
}
override fun getItemCount() = fruitList.size
}
Android 开发学习进程0.27 kotlin使用 和viewbinding的使用的更多相关文章
- Android 开发学习进程0.16 layout_weight属性 R文件关联XML Module
layout_weight属性 layout_weight属性我们常常用到,但有时候会发现它还有一些奇怪的属性,比如大多数使用时会把宽度设置成0,但要是宽度不设置成0会有什么效果? layout_we ...
- Android 开发学习进程0.19 webview 的使用
Android 中的webview android 中的webview是可以在app内部打开HTML等的网页,不必再打开浏览器,有两种实现方法,即webviewclient webChromeclie ...
- Android开发学习进程0.18 SharePreference的使用 AIDL
SharePreference SharePreference是一种持久化存储手段,使用场景很多,如第一次打开时加载的用户协议等.适合小数据单进程的应用.将数据以键值对的形式存储在XML中. 使用方式 ...
- Android 开发学习进程0.17 Android资源文件selector textview显示两种不同字体
selector 是安卓资源文件的一种,它可以使按钮等实现不同状态下的不同UI,不用在代码中实现,而使用方式有两种,一种在color文件下 创建.xml可以使按钮等字体在不同状态下的变化,其二是在dr ...
- Android 开发学习进程0.15 adb cardview framelayout 控件设置状态获取焦点
Android设备调试桥 即adb 使用adb进行无线调试的一些常用命令 adb tcpip 5555 设置调试端口为5555 防止冲突 adb shell ifconfig wlan0 查询局域网中 ...
- Android 开发学习进程0.28 腾讯TBS接入和相关问题
TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...
- Android 开发学习进程0.32 dwonloadmanager使用
downloadmanager时Android系统下载器,使用系统下载器可以避免用stream流读入内存可能导致的内存溢出问题.以下为downloadmanager初始化部分.apkurl为下载网络路 ...
- Android 开发学习进程0.14 Bindview recyclerview popwindow使用 window类属性使用
BindView ButterKnife 优势 绑定组件方便,使用简单 处理点击事件方便,如adapter中的viewholder 同时父组件绑定后子组件无需绑定 注意 在setcontentview ...
- Android 开发学习进程0.13 Androidstudio快捷键 xmlns
xmlns XML namespace xml命名空间 其中主要是定义xml文件定义位置 前缀有三种,android app tools 后面为唯一标识符URI android 表示为引用自安卓系统 ...
随机推荐
- ASP.NET网站部署到服务器IIS上和本地局域网服务器
控制面板>>>管理工具>>>打开Internet信息服务 2,如果找不到 可以控制面板>>>程序和功能>>> 打开或关闭win ...
- C# Json对象数组复杂JObject 序列化
tatic void Main(string[] args) { //先反序列化看看 string json = "{\"name\": true,\"age\ ...
- Core3.0使用Caching.Memory
前言 参考链接: 使用缓存:https://www.cnblogs.com/gygg/p/11275417.html 过期时间:https://www.cnblogs.com/maijin/p/704 ...
- python初学者-水仙花数简单算法
输出"水仙花数".所谓水仙花是指一个3位数的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数. 用for循环实现水仙花数的计算图如下所示: 1 for i in r ...
- java 常用时间操作类,计算到期提醒,N年后,N月后的日期
package com.zjjerp.tool; import java.text.ParseException; import java.text.ParsePosition; import jav ...
- 使用maven创建java项目是,jdk的版本默认为1.5,如何修改为1.8
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- Cys_Control(六) MTreeView
说明:由于Cefsharp浏览器项目需要各类控件,故之后的一些定义控件样式会参照Edge浏览器深色主题样式开发 一.查看TreeView原样式 1.通过Blend查看TreeView原有样式 < ...
- 前端网页打印插件print.js(可导出pdf)
在前端开发中,想打印当前网页的指定区域内容,或将网页导出为多页的PDF,可以借助print.js实现,该插件轻量.简单.手动引入.不依赖其他库.示范项目github:https://github.co ...
- Spring事务管理?
事务管理方式: 1.编码方案,不建议使用,具有侵入性,在原有的业务代码基础上去添加事物管理代码 2.声明式事务控制,基于AOP对目标进行代理,不具有侵入性,不需要修改原来的业务代码
- 两个字搞定DDD(领域驱动设计),DDD脱水版(一)修订版
摘自微信公众号丁辉的软件架构说