RecyclerView
添加 HeaderView
和 FooterView
的解决方案。
拥有如下特性:
- 对业务
Adapter
无侵入,也不需要额外的包装Adapter
。 HeaderView
和FooterView
直接挂载在RecyclerView
上,无需手动处理重用问题。- 支持
LinearLayoutManager
、GridLayoutManager
和StaggeredGridLayoutManager
三种布局管理器的横向和纵向布局。 - 支持多个
HeaderView
和FooterView
,并且可以动态添加和删除。 - 支持动态切换
Adapter
和LayoutManager
。 - 额外提供分页组件,方便快速实现「下拉刷新」和「加载更多」功能。
repositories {
maven { setUrl("https://jitpack.io") }
}
dependencies {
implementation("androidx.recyclerview:recyclerview:1.3.2")
implementation("com.github.TakWolf.Android-HeaderAndFooterRecyclerView:hfrecyclerview:0.0.16")
// 可选。分页组件。
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
implementation("androidx.lifecycle:lifecycle-common:2.8.7")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("com.github.TakWolf.Android-HeaderAndFooterRecyclerView:paging:0.0.16")
}
<com.takwolf.android.hfrecyclerview.HeaderAndFooterRecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
val recyclerView = findViewById<HeaderAndFooterRecyclerView>(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = adapter
val headerView = layoutInflater.inflate(R.layout.header, recyclerView.headerViewContainer, false)
recyclerView.addHeaderView(headerView)
val footerView = layoutInflater.inflate(R.layout.footer, recyclerView.footerViewContainer, false)
recyclerView.addFooterView(footerView)
Copyright 2022 TakWolf
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.