kotlin,Android教你最基础的ViewBinding视图绑定

目录

一.添加依赖

二.在Activity中使用ViewBinding

修改布局文件

修改kt文件

 效果

三.在 Fragment中使用 ViewBinding

修改布局文件

修改kt文件

效果

不玩虚的,就三分钟,看完就能学会最基础的ViewBinding如何使用

使用ViewBinding有什么好处呢

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

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

相信这两点大家使用 findViewById时是很有感觉的,但是使用视图绑定就不会有这样的问题

 

一.添加依赖

在模块的build.gradle中添加下面这一串,就是app文件下的build.gradle,不要添加错地方了

直接把 viewBinding和 dataBinding都添加了,省的以后要加麻烦

 //视图绑定添加
    buildFeatures {
        viewBinding = true
        dataBinding = true
    }

按照这张图里面的三个步骤来

在加入上述配置后Android Studio会自动为每一个布局文件都生成一个对应的Binding类。

比如ActivityMainBinding 或者 FragmentMainBinding 都是叫xxxBinding

二.在Activity中使用ViewBinding

修改布局文件

在这只是做一个示范

在整个布局文件的最外面包一层<layout>

给控件加上id

<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout
    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/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/viewbinding"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用视图绑定!"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

修改kt文件

不使用视图绑定时,是这样子的,想要拿到每一个控件都要 findViewById一次,很麻烦

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

把代码修改成这样就完成了视图绑定

class MainActivity : AppCompatActivity() {
    var binding:ActivityMainBinding ?= null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding?.root
        setContentView(view)
    }
}

这样写完要拿到控件就很方便了

class MainActivity : AppCompatActivity() {
    var binding:ActivityMainBinding ?= null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding?.root
        setContentView(view)

        //拿到控件,点击事件
        binding?.viewbinding?.setOnClickListener(){
            Toast.makeText(this@MainActivity,"这是视图绑定",Toast.LENGTH_LONG).show()
        }
    }
}

 

 效果

通过视图绑定拿到了控件,并实现点击弹出Toast效果

ViewBindingaActivity 效果

三.在 Fragment中使用 ViewBinding

在fragment中使用视图绑定,我就在以在使用Bottomnavigation的基础上进行修改。还不会navigation的小伙伴可以去看一下我之前发布的关于Bottomnavigation的文章。

修改布局文件

写布局文件其实和Activity是一样的,要用的控件加上id,在外面包一层<layout>

<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.appcompat.widget.LinearLayoutCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".fragment.FragmentA">
    <TextView
        android:id="@+id/aaa"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="FragmentA"
        android:textSize="30sp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

修改kt文件

最开始的fragment是这样的

class FragmentA : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_a, container, false)
    }
}

修改成这样就完成了视图绑定 

class FragmentA : Fragment() {
    var binding:FragmentABinding ?= null
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentABinding.inflate(inflater,container,false)
        
        return binding?.root
    }
}

 然后就可以用视图绑定写点击事件 

class FragmentA : Fragment() {
    var binding:FragmentABinding ?= null
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentABinding.inflate(inflater,container,false)
        //视图绑定拿到控件,点击事件
        binding?.aaa?.setOnClickListener(){
            Toast.makeText(requireContext(),"这是视图绑定",Toast.LENGTH_LONG).show()
        }
        return binding?.root
    }
}

 

效果

通过视图绑定拿到控件,实现点击后Toast效果

ViewBindingFragment 效果

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这次终于凑到十个字了

感谢各位哥哥姐姐,弟弟妹妹

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值