Skip to content

Binding

rongc edited this page Jul 10, 2021 · 1 revision

Binding

一些BindingAdapter

  1. RecyclerView和ViewPager2的简单使用

如果不是列表页面,但也想使用RecyclerView或ViewPager2时:

  • app:items 绑定列表数据源,
  • app:itemBinders 添加列表ItemBinder,
  • app:itemBinderName 添加列表itemBinder名称
  • app:itemDecoration 添加装饰
  • app:decoration_* 添加间距
//or <androidx.viewpager2.widget.ViewPager2
<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:items="@{viewModel.items}"
    app:itemBinders="@{ui.itemBinder}"
    // app:itemBinderName='@{"com.rongc.ui.binders.TextItemBinder"}'
    app:itemDecoration="@{ui.itemDecoration}"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

    // 或者直接设置分割线间距
    app:decoration_left="@{10dp}"
    app:decoration_top="@{10dp}"
    app:decoration_right="@{10dp}"
    app:decoration_bottom="@{10dp}"
    app:decoration_vertical_line="@{10dp}"
    app:decoration_horizontal_line="@{10dp}"

ViewPager2同理,另可简单设置轮播

<androidx.viewpager2.widget.ViewPager2
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:auto_scroll="@{true}" // 是否支持自动滚动
    app:loop="@{true}" // 是否循环轮播
    app:scroll_interval="@{1000}" // 滚动间隔
  1. ViewBinding
  • onClick 点击事件
// 普通点击事件
android:onClick="@{ui.login}"
// 传递参数View本身
android:onClick="@{ui.viewClick}"
// 传递其他参数
android:onClick="@{ui.clickWithParam(any)}"
// 直接toast
android:onClick='@{ui.toast("waw")}'
// 关闭防抖动,默认开启
app:disableDebounce="@{false}"
// 显示状态
app:visible="@{false}"
class UI {
  // 点击事件
  val login = {
    // to login
  }

  // 点击事件将View本身传递过来
  val viewClick = {v: View ->
  }

  // 点击事件传递其他参数
  fun clickWithParam(params: Any): () -> Unit = {
     log(params)
  }
}
  • 圆角:
app:round_radius="@{10dp}"
app:tl_radius="@{10dp}"
app:tr_radius="@{10dp}"
app:bl_radius="@{10dp}"
app:bl_radius="@{10dp}"
app:round_color="@{@color/white}"
// or android:background="@color/white"
  1. 扩展函数
  • dimension:
   10.dp
   14.sp
   15.idp
   16.isp
   ...
  • resource:
R.string.hello.string()
R.color.white.color()
R.drawable.ic_launcher.drawable()

"hello word".toast()
"log anything".logd()
"log error".loge()
...

  • gson:
val user = "{"id":"1"}".parse<User>()
val list: List<User> = "[{"name":"a"},{"name":"b"}]".parseList<User>()
val jsonStr = user.toJson()

"{"id":"1"}".optString("id")
// or
"{"id":"1"}".opt { obj->
    obj.optString("id")
    obj.optInt("...")
}

Clone this wiki locally