sla*_*boy 5 android kotlin android-viewbinding viewbinding
启用视图绑定后,使用:
android {
...
buildFeatures {
viewBinding = true
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用ViewBinding,问题是我们需要binding.在访问每个视图之前使用前缀。有没有一种方法可以省略这个前缀,并直接访问类中的视图?
所以而不是:
binding.textview1.text = viewModel.name
binding.button1.setOnClickListener { viewModel.userClicked() }
Run Code Online (Sandbox Code Playgroud)
直接使用:
textview1.text = viewModel.name
button1.setOnClickListener { viewModel.userClicked() }
Run Code Online (Sandbox Code Playgroud)
显然我们可以使用with(binding)和使用每个方法,但是有没有办法在全局范围内将其应用于整个类?
fun method = with(binding){
// now we can access the viewbinding
textview1.text = viewModel.name
button1.setOnClickListener { viewModel.userClicked() }
}
Run Code Online (Sandbox Code Playgroud)
是否有任何绑定设置,我们可以指定编译器从布局生成接口:
所以它会自动生成:
public interface Fragment1BindingInterface {
@NonNull
TextView getTextView1();
}
public final class Fragment1Binding implements ViewBinding, Fragment1BindingInterface {
@NonNull
private final RelativeLayout rootView;
@Override
@NonNull
private final TextView _textView1;
@Override
@NonNull
public TextView getTextView1() {
return _textView1;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以在fragment类中实现Fragment1BindingInterface,并可以直接访问所有视图,而无需binding.每次都使用。虽然这会公开发表意见,但无论如何只是问可不可以?
这可能不是您想要的,但也许您认为无论如何这是一种改进,那就是列出您想要在班级顶部的所有视图,例如
private val textview1 by lazy { binding.textview1 }
private val button1 by lazy { binding.button1 }
Run Code Online (Sandbox Code Playgroud)
然后你就可以在课堂上按照你想要的方式使用它们。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |