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
}

最新文章

  1. Redis缓存之Set使用
  2. PL/SQL基础1(笔记)
  3. oracle 表空间和表 read only迁移后不再read only
  4. JqueryAjax
  5. animation之translate、scale、alpha、rotate动画效果呈现
  6. linux关闭防火墙方法
  7. 安装zookeeper集群
  8. bat脚本-set(setlocal enabledelayedexpansion) 学习
  9. 配置tomcat的远程调试
  10. Search an Element in an array
  11. Android更新主线程UI的两种方式handler与runOnUiThread()
  12. Hdu2680 最短路
  13. pwn入门题x2
  14. 整理volatile相关知识点
  15. mvc、mvp和mvvm理解
  16. AXI Quad SPI
  17. 【转】使用lockbits方法处理图像
  18. Air test ios类使用
  19. java 观察者模式 与spring配置
  20. java使用POI进行Excel读写

热门文章

  1. Windows下python+allure的下载、安装、配置与使用
  2. P4735 最大异或和 01 Trie
  3. 在python中元组与列表的区别及序列解包
  4. Java 面向对象概述
  5. 在飞儿云主机里使用酷Q时遇到相关问题的解决办法
  6. SQL Server中datetimeset转换datetime类型问题浅析
  7. vue+element对常用表格的简单封装
  8. Code-Review-Maven编译(第三方jar包引用)
  9. JavaWeb基础总结:Filter专题
  10. java中游标