-
Notifications
You must be signed in to change notification settings - Fork 2
Binding
rongc edited this page Jul 10, 2021
·
1 revision
一些BindingAdapter
- 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}" // 滚动间隔
- 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"
- 扩展函数
- 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("...")
}