【问题标题】:return findViewById() in viewbinding在视图绑定中返回 findViewById()
【发布时间】:2020-05-01 13:37:12
【问题描述】:
我正在尝试优化旧代码。我正在尝试用视图绑定替换 findviewbyid 。
但是如何返回 viewbinding id 而不是 findviewbyid?
private TextView getTextView(int id){
return (TextView) findViewById(id);
}
这是旧代码。但我想应用视图绑定。我希望它像这样工作。因为我不知道该怎么做。
private TextView getTextView(int id){
return sampleViewBinding(id);
}
我怎样才能做到这一点?
【问题讨论】:
标签:
java
android
android-viewbinding
【解决方案1】:
View Binding 的全部目的是避免findViewById() 调用。它会自动为您完成。您要做的是将视图绑定视为findViewById()。每当您需要访问任何视图时,您所要做的就是调用生成的绑定类,并在骆驼情况下使用您的 id。例如,main_layout.xml 将生成一个由名称 MainLayoutBinding 生成的类,因此您将通过调用 MainLayoutBinding 的实例和要访问的 id 来访问布局内的所有视图。
【解决方案2】:
如果您的布局文件名为 fragment_dashboard.xml 并且在一个 ID 为 userNameTvId 的文本视图中,那么您通常可以在不使用数据绑定的情况下执行此操作:
val view = inflater.inflate(R.layout.fragment_dashboard, container, false)
val textview = view.findViewById(R.id.userNameTvId)
但是对于viewBinding,它是通过链接完成的。通过绑定对象可以接受此文本视图。上面将使用viewBinding这样重写:
val binding = FragmentDashboardBinding.inflate(inflater)
binding.userNameTvId
// to pass a value you can just do
binding.userNameTvId = "SomeOne"
val view = binding.root