ViewBinding的使用.Android、kotlin

ViewBinding的使用

Android获取控件有很多种方法,最基础的findViewById,实用但是麻烦。使用kotlin后应该会接触到插件kotlin-android-extensions,用起来很好用,子需要输入控件id,根据代码自动补全选择相应布局文件引用就可以直接获取到控件,不过因为种种原因这个方法被google废弃掉了,感兴趣的同学可以自行百度。那么就进入今天的主角了ViewBinding,以前我就有看到过不过没有仔细了解,今天闲下来仔细学习了一下,ViewBinding优点很多,下面我们具体介绍使用方法。

引入ViewBinding

ViewBinding使用方法很简单,使用它有两个条件
1.Android studio 3.6.0版本以上
2.gradle3.6.0版本以上
首先在build.gradle配置:


android {
	...
	Features {
        viewBinding true
    }
}

使用ViewBinding后自己的布局文件都会自动生成一个binding,例如xml:activity_layout_main.xml,生成后的binding叫ActivityLayoutMainBinding,以下划线断点成大驼峰形式。可以直接在文件中使用它,使用方法如下

在activity中使用:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLayoutMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        //通过binding.控件id可以直接获得控件
        binding.textView.text = "哈哈哈哈哈"
        binding.progress.max = 300
    }

下面我们来给binding封装一下,封装到基类BaseActivity中:

abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
    lateinit var binding: T
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = inflateBinding()
        setContentView(binding.root)
        initView()
        initData()
    }

    protected abstract fun inflateBinding(): T
    protected abstract fun initView();
    protected abstract fun initData();
}

在使用的时候:

class MainActivity2 : BaseActivity<ActivityKotlinTestBinding>() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding.bv.max = 300f
        binding.bv.bottomText = "模考分数"
        binding.bv.setAnimaion(270f)
        binding.tvConfirm.setOnClickListener {
        }
    }
    
    //XML布局文件名为activity_kotlin_test.xml,自动生成的binding为ActivityKotlinTestBinding 
    override fun inflateBinding(): ActivityKotlinTestBinding {
        return ActivityKotlinTestBinding.inflate(layoutInflater)
    }

    override fun initView() {
    }

    override fun initData() {
    }
}
在fragment中使用(下面介绍封装后的方法):
abstract class BaseFragment<T : ViewBinding> : Fragment() {
    var binding: T? = null
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = inflateBinding()
        return binding?.root
    }

	//由于 Fragment 的存在时间比其视图长,需要在 onDestroyView() 方法中清除对绑定类实例的所有引用
    override fun onDestroyView() {
        super.onDestroyView()
        binding = null
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initView()
        initData()
    }
    protected abstract fun inflateBinding():T
    protected abstract fun initView()
    protected abstract fun initData()
class TestFragment : BaseFragment<FragmentTestBinding>() {
    override fun inflateBinding(): FragmentTestBinding {
        return FragmentTestBinding.inflate(layoutInflater)
    }

    override fun initView() {
    	binding.textView.setOnClickListener{
    	
    	}
    }

    override fun initData() {
    	binding.textView.text = "hhhhhhhh"
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值