- 布局代码
- xml布局代码
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item__fragment_pager" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
基本使用
全局变量
private val mAdapter by lazy { WechatAdapter() }
private var page = 1
initview初始化方法中
setLoadSir(binding.refreshLayout)
binding.recyclerView.setLinearLayoutManager(mAdapter)
mAdapter.isAnimationFirstOnly = true
mAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.ScaleIn)
binding.refreshLayout.setEnableLoadMore(false)
binding.refreshLayout.setOnRefreshListener {
page = 1
mViewModel.getUserWechatArticleJson(id, page)
}
mAdapter.loadMoreModule.setOnLoadMoreListener {
page++
mViewModel.getUserWechatArticleJson(id, page)
}
//接口回调
mAdapter.setCollectionListener { collect, id, position ->
this.position = position
}
mViewModel.mWechatPagerBean.observe(this) {
if (it.curPage == 1) {
if (it.datas.isEmpty()) {
showEmpty()
} else {
mAdapter.setList(it.datas)
showContent()
}
binding.refreshLayout.finishRefresh(true)
} else {
mAdapter.addData(it.datas)
showContent()
}
mAdapter.loadMoreModule.loadMoreComplete()
if (it.curPage == it.pageCount) {
mAdapter.loadMoreModule.loadMoreEnd()
}
}
override fun initData() {
page = 1
//请求数据
mViewModel.getUserWechatArticleJson(id, page)
}
adapter适配器
class WechatAdapter :
BaseQuickAdapter<WechatPagerBean, BaseViewHolder>(R.layout.item__fragment_pager),
LoadMoreModule {
private lateinit var listener: (collect: Boolean, id: Int, position: Int) -> Unit
override fun convert(holder: BaseViewHolder, item: WechatPagerBean) {
holder.setText(
R.id.tv_name,
item.author.ifEmpty { item.shareUser }
)
holder.setText(R.id.tv_time, item.niceDate)
holder.setText(R.id.tv_title, item.title)
holder.setText(R.id.tv_type, "${item.superChapterName}/${item.chapterName}")
holder.setImageResource(
R.id.iv_collection,
if (item.collect) R.drawable.ic_like else R.drawable.ic_like_not
)
holder.itemView.onClick { startWebViewActivity(item.id, item.link, item.title) }
holder.getView<AppCompatImageView>(R.id.iv_collection).onClick {
checkLogin {
listener.invoke(item.collect, item.id, getItemPosition(item))
}
}
}
fun setCollectionListener(listener: (collect: Boolean, id: Int, position: Int) -> Unit) {
this.listener = listener
}