0
点赞
收藏
分享

微信扫一扫

【Android,Kotlin】使用新的视图绑定工具ViewBinding !

  • Jake Wharton 也在 Butter Knife开源库中说
Development on this tool is winding down. Please consider switching to view binding in the coming months.
这个工具的开发正在逐步结束。请考虑在未来几个月切换到ViewBinding
  • 在那个findViewbyId的时代,ButterKnife堪称最棒的工具,长江后浪推前浪,那么…

使用新的视图绑定工具!

  • 基于模块化开发的思想,如果你想启用某个moudle的viewBing,你就可以在当前moudle的build.gradle下加入如下代码:
plugins {
...
id 'kotlin-parcelize'
...
}

android {
...
viewBinding {
enabled = true //已过时,之前的写法3.6
}
...
}

【Android,Kotlin】使用新的视图绑定工具ViewBinding !_kotlin

plugins {
...
id 'kotlin-parcelize'
...
}

android {
...
buildFeatures {
viewBinding true//最新的写法4.1
}
...
}
  • 如果在使用中开不想为某个布局文件生成binding类,则可以使用如下属性添加到布局的根标签中,如下图:
    【Android,Kotlin】使用新的视图绑定工具ViewBinding !_kotlin_02
tools:viewBindingIgnore="true"
  • 当moudle开启视图绑定功能后,viewBinding会为每一个布局生成对应的绑定类.每一个绑定类生成对根视图和定义了ID的所有视图的引用.

用法
​​​比如,之前爆红的语句,在kotlin-android-extensions的天下时​

recyclerView.layoutManager = layoutManager

​那么我现在要这么写:Fragment​

private var _placeBinding:FragmentPlaceBinding?=null
private val placeBinding get() = _placeBinding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_placeBinding= FragmentPlaceBinding.inflate(inflater,container,false)
return placeBinding.root
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
//用法,例如如下逻辑
val layoutManager = LinearLayoutManager(activity)
placeBinding.recyclerView.layoutManager = layoutManager
...
}

override fun onDestroy() {
super.onDestroy()
_placeBinding=null
}

当然我这是Fragment,在Activity中…

//kotlin
private lateinit var weatherBinding: ActivityWeatherBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val nowBinding=NowBinding.inflate(layoutInflater)
setContentView(nowBinding.root)
...
}
//Java
NowBinding nowBinding= NowBinding.inflate(LayoutInflater.from(this));
setContentView(nowBinding.getRoot());
  • 如果你想有更深的了解,请看:​​是时候拥抱ViewBinding了!!​​



举报

相关推荐

0 条评论