Android视图绑定的使用
Android官方对视图绑定的介绍
通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
在大多数情况下,视图绑定会替代
findViewById
。
官方地址
视图绑定的使用
首先要启动视图绑定
启动视图绑定需要再build.gradle中配置
android {
...
viewBinding {
enabled = true
}
}
启用后,就可以不要再使用findViewById方法来绑定组件了,系统会自动将控件封装成一个绑定类,将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词
例如
布局文件activity_main.xml对应的绑定类为ActivityMainBinding
在Activity中使用视图绑定
如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate()
方法中执行以下步骤:
- 调用生成的绑定类中包含的静态
inflate()
方法。此操作会创建该绑定类的实例以供 Activity 使用。 - 通过调用
getRoot()
方法或使用 Kotlin 属性语法获取对根视图的引用。 - 将根视图传递到
setContentView()
,使其成为屏幕上的活动视图。
例如
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
}
在Fragment中使用视图绑定
如需设置绑定类的实例以供 Fragment 使用,请在 Fragment 的 onCreateView()
方法中执行以下步骤:
- 调用生成的绑定类中包含的静态
inflate()
方法。此操作会创建该绑定类的实例以供 Fragment 使用。 - 通过调用
getRoot()
方法或使用 Kotlin 属性语法获取对根视图的引用。 - 从
onCreateView()
方法返回根视图,使其成为屏幕上的活动视图。
例如
private FragmentMainBinding binding;
@Override
public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
binding = FragmentMainBinding.inflate(inflater, container, false);
View view = binding.getRoot();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
调用布局下的组件
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">
<TextView
android:id="@+id/tv_hello"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="hello world">
</TextView>
</androidx.drawerlayout.widget.DrawerLayout>
下面我们要调用tv_hello这个组件
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
System.out.println(view.tvHello.getText().toString());
}
本文就到这里,喜欢的朋友能留下一个免费的赞嘛,你的鼓励是我前进的动力!