首页 > 编程知识 正文

wpf treeview数据绑定,M视图

时间:2023-05-06 05:03:18 阅读:51704 作者:1642

Android jetpack : replacefindviewbyidwithviewbinding (使用视图绑定代替findviewbyid )视图绑定功能使与视图交互的代码更简单在模块中启用视图绑定时,将为模块中的每个XML布局文件生成绑定类。 绑定类的实例包含对在相应布局中具有ID的所有视图的直接引用。 在大多数情况下,视图绑定将代替findViewById。

注意: Android Studio 3.6 Canary 11或更高版本中提供了视图绑定。

视图绑定功能按模块启用

要在模块中启用视图绑定,请将其view绑定元素添加到build.gradle文件中,如下例所示。

安卓grad le plugin 3.6

Android { . view绑定{ enabled=true } androidgradleplugin 4.0

Android { . build features { view binding=true } } activity _ main.XML

//activity _ main.xmlconstraintlayouttextviewandroid 3360 id=' @ id/greeting '/constraintlayputactivitymainbinding克拉

//generatesandroidmainbindingclassactivitymainbinding { val greeting : textview } oncreate方法

overridefunoncreate (savedinstancestate :绑定? { . val绑定=activitymainbinding.inflate (layoutinflater ) setcontentview )绑定. root )在生成绑定类时生成布局文件

linear layout . tools : viewbindingignore=' true ' ./linear layout在为模块启用视图绑定功能时,模块中包含的XML布局文件每个绑定类都包含对具有根视图和ID的所有视图的引用。 绑定类的名称是通过将XML文件的名称转换为驼峰字大小写,然后在末尾添加单词“绑定”生成的。

例如,假设布局文件的名称为result_profile.xml。

linear layout . textview Android 3360 id=' @ id/name '/imageview Android 3360 croptopadding=' true '/button Android 3360 ii bubudding 由rounded_button'/linearlayout生成的绑定类的名称为ResultProfileBinding。 这个类有两个字段。 一个名为name的TextView,另一个名为button的button。 绑定类中不存在引用,因为布局的ImageView没有ID。

每个绑定类还包含getRoot ()方法,该方法提供对相应布局文件的“根”视图的直接引用。 在此示例中,ResultProfileBinding类的getRoot ()方法返回LinearLayout根视图。

以下各节介绍了生成的绑定类在Activity和Fragment中的使用。1. 在 Activity 中使用视图绑定

要设置Activity使用的绑定类的实例,必须在Activity的onCreate ()方法中执行以下操作:

调用生成的绑定类中包含的静态inflate ()方法。 此操作创建要在Activity中使用的绑定类的实例。 对根视图的引用是通过调用getRoot (方法或使用Kotlin属性语法获取的。 将根视图传递给setContentView (),使其成为屏幕上的活动视图。 隐私保护配置绑定; @ overrideprotectedvoidoncreate (bundlesavedinstancestate ) super.oncreate ) savedinstancestate; 瓶子

ding = ResultProfileBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); }

现在即可使用该绑定类的实例来引用任何视图:

binding.getName().setText(viewModel.getName()); binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });

2. 在 Fragment 中使用视图绑定

设置绑定类的实例以供 Fragment 使用,需在 Fragment 的 onCreateView() 方法中执行以下步骤:

调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Fragment 使用。通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。从 onCreateView() 方法返回根视图,使其成为屏幕上的活动视图。

注意:inflate() 方法会要求你传入布局膨胀器。如果布局已膨胀,可以调用绑定类的静态 bind() 方法。

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; }

现在即可使用该绑定类的实例来引用任何视图:

binding.getName().setText(viewModel.getName()); binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });

注意:Fragment 的存在时间比其视图长。请务必在 Fragment 的 onDestroyView() 方法中清除对绑定类实例的所有引用。
3. 与 findViewById 的区别

与使用 findViewById 相比,视图绑定具有一些很显著的优点:

Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

用View binding替换findViewById: Safe , Less boilerplate(更少的样板)

4. 与数据绑定的对比

视图绑定和数据绑定均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例,与数据绑定相比,具有以下优势:

更快的编译速度:视图绑定不需要处理注释,因此编译时间更短。易于使用:视图绑定不需要特别标记的 XML 布局文件,因此在应用中采用速度更快。在模块中启用视图绑定后,它会自动应用于该模块的所有布局。

反过来,与数据绑定相比,视图绑定也具有以下限制:

视图绑定不支持布局变量或布局表达式,因此不能用于直接在 XML 布局文件中声明动态界面内容。视图绑定不支持双向数据绑定。

考虑到这些因素,在某些情况下,最好在项目中同时使用视图绑定和数据绑定。你可以在需要高级功能的布局中使用数据绑定,而在不需要高级功能的布局中使用视图绑定。

参考视频链接: link.
作者:hhdjc
原文链接: link.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。