东莞网站建设提供商,做ppt的模板的网站有哪些,凡客小程序,网络营销公司排行榜视图绑定#xff08;ViewBinding#xff09;在开发中起到的作用是代替findViewById。
初始设置
ViewBinding是按模块启动的#xff0c;在使用之前需要在模块中的gradle中开启ViewBinding。
//kotlin
android {...buildFeatures {viewBinding true}
}//groovy
android {.…视图绑定ViewBinding在开发中起到的作用是代替findViewById。
初始设置
ViewBinding是按模块启动的在使用之前需要在模块中的gradle中开启ViewBinding。
//kotlin
android {...buildFeatures {viewBinding true}
}//groovy
android {...buildFeatures {viewBinding true}
}
使用
当我们为某个模块引入ViewBinding并Sync之后系统会自动为该模块下的每一个xml生成一个绑定类每个绑定类都包含该xml中的所有组件id的引用而这些类的名称都与xml有关。例如我们已有一个布局文件名为result_profile.xml他的绑定类名称就是ResultProfileBinding。
以下展示了如何在Activity和Fragment中使用生成的绑定类。
Activity
在onCreate中
调用绑定类的inflate方法目的是创建该绑定类的实例调用getRoot方法或使用Kotlin属性语法获取对根视图的使用将第二步获取的根视图传递给setContentView方法使其成为屏幕上的活动View。
//kotlin
private lateinit var binding: ResultProfileBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ResultProfileBinding.inflate(layoutInflater)//12setContentView(view)//3
}//java
private ResultProfileBinding binding;Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding ResultProfileBinding.inflate(getLayoutInflater());//1View view binding.getRoot();//2setContentView(view);//3
}
此后可以使用该绑定类的实例来引用任何视图
//kotlin
private ResultProfileBinding binding;Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding ResultProfileBinding.inflate(getLayoutInflater());View view binding.getRoot();setContentView(view);
}//java
binding.name.setText(viewModel.getName());
binding.button.setOnClickListener(new View.OnClickListener() {viewModel.userClicked()
});
Fragment
Fragment和Activity中的用法差不多需要在onCreateView方法中执行以下
调用绑定类中的inflate方法调用getRoot方法或使用Kotlin属性语法获取根视图的引用从onCreateView中返回根视图使其成为屏幕上的活动View。
//kotlin
//该变量只在onCreateView和onDestroyView中可见
private var _binding: ResultProfileBinding? null
private val binding get() _binding!!override fun onCreateView(inflater: LayoutInflater,container: viewGroup?,savedInstanceState: Bundle?
): View? {_binding ResultProfileBinding.inflate(inflater, container, false)val view binding.rootreturn view
}override fun onDestroyView() {super.onDetroy()_binding null
}//java
private ResultProfileBinding binding;Override
public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {binding ResultProfileBinding.inflate(inflater, container, false);View view binding.getRoot();return view;
}Override
public void onDestroyView() {super.onDestroyView();binding null;
}
由于kotlin中空类型系统的存在在fragment中的ViewBinding写法与java相比会稍显复杂需要在新建一个变量接收绑定的实例并给出非空断言。
与findViewById的对比
两者都可用于直接引用视图的绑定类ViewBinding的优势在于
加快编译速度ViewBinding不需要处理注解易于使用不需要标记xml文件因为每个xml都会自动生成相应的绑定类
而与findViewById即数据绑定相比ViewBinding具有以下限制
不支持布局变量或布局表达式因此不能直接从xml声明动态界面内容不支持双向数据绑定