在Activity 和 Fragment 只要操作 xml 的元件,在 onCreate 时就要先加一堆
元件宣告( findViewById )再来操作, 使用 View Binding,大部份就可以
不用 findViewById,直接用元件的 id 名称就可以了,是不是很方便呀。
在build.gradle(app) 中宣告
android {
...
buildFeatures {
viewBinding true
}
}
在activity 中使用 ViewBinding
class Day18Activity : AppCompatActivity() {
private lateinit var viewModel: Day18ViewModel
// ViewBinding
private lateinit var binding: ActivityDay18Binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_day18)
// ViewBinding
binding = ActivityDay18Binding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
//var dayTitle: TextView = findViewById(R.id.tvtitle)
viewModel = ViewModelProvider(this).get(Day18ViewModel::class.java)
viewModel.mTitle.observe(this){
//dayTitle.text = it
// ViewBinding use id name
binding.tvtitle.text = it
}
viewModel.load()
}
}
在fragment 中使用 ViewBinding
//class Day16Fragment : Fragment(R.layout.day16_fragment) {
class Day16Fragment : Fragment() {
//ViewBinding
private var _binding: Day16FragmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = Day16FragmentBinding.inflate(inflater,container,false)
val view = binding.root
return view //super.onCreateView(inflater, container, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Use the 'by activityViewModels()' Kotlin property delegate
// from the fragment-ktx artifact
val model: Day16ViewModel by activityViewModels()
//var textView:TextView = this.requireView().findViewById(R.id.fragmenttext)
//textView.text = model.getArticleTitle()
//ViewBinding use id
binding.fragmenttext.text = model.getArticleTitle()
println("Fragment call ViewModel get Acticle Title = "+model.getArticleTitle())
}
}
与 findViewById 的区别
Null safety 空安全:由於视图绑定创建了对视图的直接引用,因此不存在因视图 ID
无效而导致空指针异常的风险。
Type safety 类型安全:每个绑定类中的字段的类型与其在 XML 文件中引用的视图相匹配。
https://developer.android.com/topic/libraries/view-binding
<<: GitHub Action Security - 小心 workflow 泄漏敏感资讯
>>: Day 18 储存宝石:【Lab】S3 储存类别 & 生命周期管理 (下)
ORM (Object Relational Mapping) 是目前在做资料库应用程序中,用来定义...
在11sp12仍然有个问题,在代理商这边始终无法解决 因此又自行新增按钮来处理问题 1.在表单Act...
这系列主要就是讲Amazon ECS Anywhere 所以先来看看阳春版怎麽建立出来 基础运行元件...
Provider Provider封装了 InheritedWidget 功能,提供更高效且易懂的使...
经过这两篇CreateML建立机器学习模型与如何提升判断准确度的教学相信大家都学会了该如何制作Cr...