Jetpact 之 DataBinding

DataBinding的意义:
  • 让布局文件承担了部分原本属于页面的工作,使页面布局耦合度进一步降低
DataBinding使用:

build.gradle中配置

   buildFeatures {
        dataBinding true
    }

布局文件:
可使用快捷生成databinding模板代码
鼠标放到布局文件内容首位alt +enter


image.png



    
        
        
     
    

    

        


        

include 二级布局:




        
            
            

        

    

        
    

该布局包含二级页面引用,
标签 作用引入对象
name="user" 对象名称
type="com.example.composedemo.User" 对象地址
标签 作用导入工具类可直接使用的静态方法

activity 中使用

class Test2Activity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var dataBinding: ActivityTest2Binding =
            DataBindingUtil.setContentView(this, R.layout.activity_test2)
        var user = User("小美",3)
// 
        dataBinding.user = user //对应xml定义的对象名
//button 点击事件的处理类和User类似
        dataBinding.eventhandlelistener = EventHandleListener(this)
    }
}

点击事件处理类:

class EventHandleListener(var context: Context) {

    fun onButtonClick(view:View){
        Toast.makeText(context,"点赞",Toast.LENGTH_LONG).show()
    }

}

在xml中的使用就是: android:onClick="@{eventhandlelistener.onButtonClick}"

评分显示处理类:

object ScoreUtil {
    @JvmStatic
    fun getScoreName(score: Int): String {
        return when (score) {
            1 -> "一星"
            2 -> "二星"
            3 -> "三星"
            4 -> "四星"
            5 -> "五星"
            else -> {
                "未评级"
            }
        }
    }
}

在xml中的使用就是: android:text="@{ ScoreUtil.getScoreName(user.score) }"

针对二级页面的对象数据传递定义:
在二级页面定义

 

父页面使用: app:user = "@{user}"
此处的app:user 命名对应二级页面对象的命名( 中的name值)
二级页面的使用就可以和父页面的使用方法一样


image.png

你可能感兴趣的:(Jetpact 之 DataBinding)