apply plugin: ‘kotlin-android-extensions’ 该插件已经被废弃掉了
所以在移除该插件之后,相关的代码如:
import kotlinx.android.synthetic.main
也废弃掉了无用了。
在gradle中添加:
buildFeatures{
viewBinding true
}
可以简单参考如下的代码结构(kt)
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import im.zego.goclass.R
import im.zego.goclass.databinding.LayoutSuperboardSkipPageViewBinding
import im.zego.superboard.ZegoSuperBoardManager
import im.zego.superboard.constant.ZegoSuperBoardError
/**
* 超级白板的切换页面 视图
* 主要包含切换超级白板页面,名称,预览组件等等
*/
class SuperboardSkipPageView : ConstraintLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
// 数据绑定
var view = LayoutInflater.from(context).inflate(R.layout.layout_superboard_skip_page_view, this)
var binding = LayoutSuperboardSkipPageViewBinding.bind(view)
// 防止快速点击页面/步数跳转
var lastClickPageChangeTime = 0L
init {
//初始化布局
initLayout()
}
private fun initLayout() {
// 白板名称
binding.mainTopWhiteboardName.setOnClickListener {
// 弹出白板的内容出来
boardNameClick.onClick(this)
}
// 预览按钮
binding.mainTopPreview.visibility = View.GONE
binding.mainTopPreview.setOnClickListener {
val newSelectedState = !binding.mainTopPreview.isSelected
binding.mainTopPreview.isSelected = newSelectedState
}
// 页数
binding.mainPageIndex.setOnClickListener {
// 什么都不做,主要是为了避免误触发顶部栏的显示
}
// 上一页
binding.mainPagePrev.setOnClickListener {
if (System.currentTimeMillis() - lastClickPageChangeTime < 500) {
return@setOnClickListener
}
lastClickPageChangeTime = System.currentTimeMillis()
// 切换到上一页
ZegoSuperBoardManager.getInstance().superBoardView?.currentSuperBoardSubView?.flipToPrePage {
(
if(it == ZegoSuperBoardError.ZegoSuperBoardSuccess){
/** 翻页成功 */
}else{
/** 翻页失败 */
}
)
}
}
// 下一页
binding.mainPageNext.setOnClickListener {
if (System.currentTimeMillis() - lastClickPageChangeTime < 500) {
return@setOnClickListener
}
lastClickPageChangeTime = System.currentTimeMillis()
ZegoSuperBoardManager.getInstance().superBoardView?.currentSuperBoardSubView?.flipToNextPage {
(
if(it == ZegoSuperBoardError.ZegoSuperBoardSuccess){
/** 翻页成功 */
}else{
/** 翻页失败 */
}
)
}
// Excel 表格页名称
binding.mainTopSheetName.setOnClickListener {
// 弹出 sheet的列表信息出来
sheetNameClick.onClick(this)
}
}
}
/**
* 点击回调方法
*/
private lateinit var boardNameClick : View.OnClickListener
private lateinit var sheetNameClick : View.OnClickListener
private lateinit var previewClick : View.OnClickListener
fun setBoardNameClick(onClick :View.OnClickListener ){
boardNameClick = onClick
}
fun setSheetNameClick(onClick :View.OnClickListener ){
sheetNameClick = onClick
}
fun setPreviewClick(onClick :View.OnClickListener ){
previewClick = onClick
}
/**
* 设置文件名称
*/
fun setFileName(name : String ){
binding.mainTopWhiteboardName.text = name
}
fun setSheetName(name : String){
binding.mainTopSheetName.text = name
}
fun setPageIndex(pageString: String){
binding.mainPageIndex.text = pageString
}
}
在xml 的root view 必须和该对象所继承的类型要一样,要不view binding 一用到activity构建的时候,直接就崩了。
例如:
Caused by: java.lang.ClassCastException: im.zego.goclass.view.superboard.SuperboardSkipStepView cannot be cast to android.widget.RelativeLayout
原因是xml 是RelativeLayout
为root;而SuperboardSkipStepView却继承的是约束布局~这不就崩了吗