本库实现了下拉刷新的逻辑,且实现了嵌套滑动接口。在嵌套滑动机制下正常工作。易于扩展和自定义。
由 状态机 驱动
- minsdk 14/21(compose)
- kotlin | compose
- 使用状态机实现
- 支持嵌套滑动
- 支持Jetpack Compose
- 易于扩展
- instagram 刷新样式
- 微信首页小程序下拉
- 微信朋友圈下拉
- Android 官方嵌套滑动 demo 适配
- 添加依赖
repositories {
...
mavenCentral()
...
}
dependencies {
...
// android view system 的依赖
implementation "wtf.s1.ui:nsptr-view:x.x.x"
// jetpack compose 的依赖
implementation "wtf.s1.ui:nsptr-compose:x.x.x"
...
}
- 在Compose中使用
val coroutine = rememberCoroutineScope()
val nsPtrState = remember {
NSPtrState(
coroutineScope = coroutine
) {
// todo 刷新逻辑
it.dispatchPtrEvent(Event.RefreshComplete)
}
}
NSPtrLayout(
nsPtrState = nsPtrState,
modifier = Modifier.fillMaxSize(),
) {
NSPtrEZHeader(
modifier = Modifier
.offset(0.dp, 12.dp),
nsPtrState = nsPtrState
)
LazyColumn(Modifier.ptrContent()) {
items(10) { index ->
// todo
}
}
}
- 用代码实现
addView(
NSPtrEZLayout(context).apply {
addView(
RecyclerView(context).apply {
// 添加数据和adapter
},
NSPtrLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT
)
)
addPtrListener(object : NSPtrListener {
override fun onRefreshing(ptrLayout: NSPtrLayout) {
super.onRefreshing(ptrLayout)
// 下拉刷新开始,请求网路
}
})
// 自动刷新
isRefreshing = true
},
LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
)
- 用XML实现
<wtf.s1.ui.nsptr.view.NSPtrEZLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</wtf.s1.ui.nsptr.view.NSPtrEZLayout>