当前位置: 首页 > wzjs >正文

iphone手机网站建设济南市建设招标中心网站

iphone手机网站建设,济南市建设招标中心网站,做平台app需要什么,门户网站有哪些局限性一、DataBinding 基础配置1.启动流程在 build.gradle 中启用:android {dataBinding {enabled true} }这会让编译器为每个布局文件生成对应的绑定类(如 ActivityMainBinding、DetailsFragmentBinding)。 2. 布局文件转换将普通布局文件转换为…

一、DataBinding 基础配置

1.启动流程

在 build.gradle 中启用:

android {dataBinding {enabled = true}
}

这会让编译器为每个布局文件生成对应的绑定类(如 ActivityMainBindingDetailsFragmentBinding)。 

2. 布局文件转换

将普通布局文件转换为 DataBinding 布局,需要在根标签外包裹 <layout> 标签:

<layout xmlns:android="http://schemas.android.com/apk/res/android"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/nameTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name}" /></LinearLayout>
</layout>

二、绑定基础操作 

1.绑定基本数据对象

        创建数据模型
data class User(var name: String,var age: Int
)

          在 Activity 中设置绑定

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)// 使用 DataBindingUtil 生成的 Binding 类(Kotlin 语法)val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)// 创建数据对象val user = User("John Doe", 25)// 设置数据对象到绑定类binding.user = user}
}

 2.事件绑定 

绑定点击事件(布局文件)

<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="viewModel"type="com.example.MyViewModel" /></data><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Submit"android:onClick="@{() -> viewModel.submit()}" />
</layout>

 在 ViewModel 中处理事件

class MyViewModel {fun submit() {// 处理提交逻辑}
}

 三、自定义绑定方法

        自定义 Data Binding 逻辑的核心是 @BindingAdapter 注解。这个注解用于类中的静态方法(在 Kotlin 中通常是 companion object,使方法成为静态),以定义可在 XML 布局文件中使用的自定义属性。

1.设置基本的视图属性(setMediaSourceInfosetMediaSourceRightButton

这些适配器展示了 Data Binding 最简单的用法:

@BindingAdapter("media_source_icon", "media_source_name")
@JvmStatic
fun setMediaSourceInfo(view: MediaSourceBar, drawable: Drawable?, name: String?) {name?.let { view.setMediaSourceName(it) }drawable?.let { view.setMediaSourceIcon(it) }
}

在XML 中,你可以这样使用:

<com.example.MediaSourceBarapp:media_source_icon="@{viewModel.mediaIcon}"app:media_source_name="@{viewModel.mediaName}" />

这直接根据 DrawableString 数据在自定义 MediaSourceBar 视图上设置属性。 

2.将数据绑定到 RecyclerViewbindRecyclerView

        这是 Data Binding 的常见而强大的应用。你无需在 Fragment 或 Activity 中手动设置适配器和提交列表,Data Binding 会处理这些:

@BindingAdapter("data")
@JvmStatic
fun bindRecyclerView(recyclerView: Recyclerview,list: MutableList<ListItem>?,
) {val adapter = recyclerView.adapterif (adapter is RecyclerViewListAdapter) {list?.let { adapter.submitList(it) }}
}

         这里,data 属性与 RecyclerView 一起使用。适配器检查现有的 recyclerView.adapter 是否是特定类型(RecyclerViewListAdapter),然后调用其 submitList 方法,很可能使用 DiffUtil 进行高效更新。 XML 用法:

<androidx.recyclerview.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"app:data="@{viewModel.itemsList}" />
3.处理多个属性和复杂对象(bindMediaMetadataInfobindMediaMetadataProgressbindMediaMetadataCommands

        这些适配器展示了如何传递自定义对象和多个相关属性:

@BindingAdapter(value = ["media_metadata", "media_source"], requireAll = false)
@JvmStatic
fun bindMediaMetadataInfo(simpleMediaView: PlayInfoView,mediaMetadata: MediaMetadata?,mediaSource: ServiceBean?
) {simpleMediaView.setMediaMetadata(mediaMetadata)// 基于 mediaSource 的条件逻辑if (mediaSource?.packageName == MediaBrowserManager.NETEASE_PACKAGE_NAME) {simpleMediaView.setMediaServiceBean(mediaSource)} else {simpleMediaView.setMediaServiceBean(null)}
}

PlayInfoView 会使用 MediaMetadataServiceBean 对象进行更新。条件逻辑 (if (mediaSource?.packageName == MediaBrowserManager.NETEASE_PACKAGE_NAME)) 表明你可以在绑定适配器中直接嵌入业务逻辑,根据数据决定如何更新视图。

4.条件 UI 更新和资源更改(isPlaying

isPlaying 适配器是基于布尔状态动态更改 UI 的一个很好的例子:

@BindingAdapter("isPlaying", requireAll = false)
@JvmStatic
fun bindMediaMetadataPlayback(view: View,isPlaying: Boolean?,
) {if (view is PlayInfoView) {view.setPlayback(isPlaying)}if (view is tech.jidouauto.component.widgets.basic.ImageView) {if (isPlaying == true) {view.setImageResource(com.jidouauto.mediacenter.R.drawable.item_icon_pause)} else {view.setImageResource(com.jidouauto.mediacenter.R.drawable.item_icon_play)}}
}

 这个适配器智能地处理不同的 View 类型。如果视图是 PlayInfoView,它会调用 setPlayback。如果它是 ImageView,它会更改图像资源为播放或暂停图标,将此逻辑从你的 Activity/Fragment 中移除。

5.使用自定义转换进行图片加载(image_corners_uriimage_cycle_uriplayer_album_image_cover

这些适配器封装了复杂的图片加载逻辑:

@BindingAdapter("image_corners_uri", "image_radius", requireAll = false)
@JvmStatic
fun imageUri(view: tech.jidouauto.component.widgets.basic.ImageView, uri: Any?, radius: Int?) {uri?.let {val imageResource = ImageResource.Remote(uri,transformationType = IImageLoader.ImageTransformationType.RoundCorners(radius?.dp ?: 24.dp),placeholder = com.jidouauto.mediacenter.R.drawable.icon_placeholder,error = com.jidouauto.mediacenter.R.drawable.icon_placeholder)view.imageSource = imageResource}
}

        这些适配器不是直接在代码中调用图片加载库(如 Glide 或 Picasso),而是定义自定义属性(image_corners_uriimage_radiusimage_cycle_uriplayer_album_image_cover),这些属性处理设置带有特定转换(圆角、圆形裁剪)、占位符和错误图片的图像源。这使得你的 XML 干净,代码分离。

6.将数据绑定到自定义视图(banner_data

这演示了将复杂数据对象绑定到完全自定义的视图:

@BindingAdapter("banner_data", requireAll = false)
@JvmStatic
fun bindBannerViewData(view: TopBannerCarouselPager,data: MainBannerItem?,
) {Logger.info("bind main banner data=${data?.items}")if (data == null) returnview.setAdapter(TopBannerCarouselPager.Adapter(data.items, data.itemOnClick))
}

TopBannerCarouselPager 自定义视图直接接收 MainBannerItem 对象,适配器使用提供的数据和点击处理程序设置其内部适配器。

四、整体总结

        DataBinding 的使用需先在 build.gradle 中启用,将布局文件用<layout>标签包裹以生成对应绑定类;

        通过创建数据模型,在 Activity 中利用 DataBindingUtil 设置布局并绑定数据对象,还可在布局中绑定 ViewModel 的事件方法;其核心自定义逻辑在于 @BindingAdapter 注解,可用于静态方法定义自定义属性,实现多种功能,如设置视图基本属性、将数据绑定到 RecyclerView、处理多个属性和复杂对象、根据条件更新 UI、进行图片加载的自定义转换以及将数据绑定到自定义视图等,能让 XML 更简洁,实现代码分离。


文章转载自:

http://DXxo7DrO.wywqz.cn
http://3BwnLlG8.wywqz.cn
http://T19HLZ7T.wywqz.cn
http://EwPybvqb.wywqz.cn
http://Qri2SlVe.wywqz.cn
http://NWvUyaVh.wywqz.cn
http://F4Kug3Qd.wywqz.cn
http://SruuFxez.wywqz.cn
http://Pk2dgwZT.wywqz.cn
http://ePEEPcfR.wywqz.cn
http://DrsAzjEf.wywqz.cn
http://DOQf3nxx.wywqz.cn
http://kbA7n6m4.wywqz.cn
http://KYd8QNiZ.wywqz.cn
http://TEMcaMVG.wywqz.cn
http://NEB9aITX.wywqz.cn
http://cXftg5h8.wywqz.cn
http://5kBb1G8L.wywqz.cn
http://7A1cdQzS.wywqz.cn
http://BJwaV6aV.wywqz.cn
http://RH72WGbp.wywqz.cn
http://V6z80o2A.wywqz.cn
http://MhvoblR4.wywqz.cn
http://5lVX11jm.wywqz.cn
http://vFlmJt5u.wywqz.cn
http://UkNpwj7V.wywqz.cn
http://sC06AiTL.wywqz.cn
http://8UfbFszM.wywqz.cn
http://C2A7ZB7w.wywqz.cn
http://gaf75aTA.wywqz.cn
http://www.dtcms.com/wzjs/756207.html

相关文章:

  • 网站推广方案整理青岛网站建设公司 中小企业补贴
  • 望京做网站网站建设中出现的错误代码
  • 太原建筑市场网站谷城网站快速排名
  • 可以看任何网站的浏览器下载西安做商铺的网站
  • 企业网站怎么做百度网站怎么做网站地图
  • 个人网站备案 名称个人网站 做导航
  • 门户网站的基本特征信息与服务计算机网站建设员
  • 网站建设需要学的布吉企业网站建设
  • 网站建设的经济效益网页设计与制作书籍
  • 无棣做网站网页设计作业答案
  • 百宝图建设工程电子网站公司注册网上怎样注册
  • 河间建设网站上海手机网站建设电话
  • 做投票网站教程智能软件开发方向怎么样
  • 沈阳专业做网站公司做网站常用什么软件
  • 浙江建设技术职业学院网站承德网站建设步骤
  • 夏天做那些网站致富个人简历wordpress主题
  • 镇江论坛网站建设seo网站推广方法
  • 互粉的网站是怎么做的苏州网站建设网站优化
  • 途牛电子商务网站建设wdcp 网站建设
  • 网站开发课程总结做棋牌网站违法
  • 监利网站建设wordpress页面怎么编辑器
  • 外链网盘网站网站建设服务器租赁
  • 怎么修复网站死链网站定制开发四大基本原则
  • 唐山房产网站建设图片类网站模板
  • 当阳网站建设电话罗定城乡建设局网站
  • 视频直播网站建设软工毕设做网站
  • 服饰视频网站建设网站降权怎么处理
  • 银川公司网站建设可以投稿的写作网站
  • 帝国做视频网站自媒体写作平台
  • 设计网站私单价格wordpress主题上传到哪里