我已经按照这个视频实现了RecyclerView的标题:https://www.youtube.com/watch?v=ksIpDnLiCMs但是我不知道如何集成带有ProgressBar的加载底部,我尝试自己实现它,但它没有起作用,它应该在我向下滚动时加载更多,但无论我滚动到哪里都在不停地加载,并且ProgressBar不会出现。以下是我的代码:
MainActivity.kt:
class MainActivity : AppCompatActivity() {
val numberList: MutableList<String> = ArrayList()
var page = 1
var isLoading = false
var limit = 10
lateinit var adapter: RV_Adapter
lateinit var layoutManager: LinearLayoutManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
getPage()
recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val visibleItemCount = layoutManager.childCount
val pastVisibleItem = layoutManager.findFirstCompletelyVisibleItemPosition()
val total = adapter.itemCount
if(!isLoading) {
if((visibleItemCount + pastVisibleItem) >= total) {
page++
getPage()
}
}
super.onScrolled(recyclerView, dx, dy)
}
})
}
fun getPage() {
isLoading = true
//progressBar.visibility = View.VISIBLE
val start : Int = (page-1)*limit
val end : Int = page * limit
for(i in start..end){
numberList.add("PodView " + i.toString())
}
Handler().postDelayed({
if(::adapter.isInitialized) {
adapter.notifyDataSetChanged()
} else {
adapter = RV_Adapter(this, numberList)
recyclerView.adapter = adapter
}
isLoading = false
//progressBar.visibility = View.GONE
}, 0)
}
}
RV_Adapter.kt
class RV_Adapter(private val context: Context, private val numberList: MutableList<String>) : RecyclerView.Adapter<BaseViewHolder<*>>() {
companion object {
private const val TYPE_HEADER = 0
private const val TYPE_ITEMS = 1
private const val TYPE_FOOTER = 2
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
return when(viewType) {
TYPE_HEADER -> {
val view = LayoutInflater.from(context).inflate(R.layout.rv_header, parent, false)
HeaderViewHolder(view)
}
TYPE_ITEMS -> {
val view = LayoutInflater.from(context).inflate(R.layout.listview_item, parent, false)
ItemViewHolder(view)
}
TYPE_FOOTER -> {
val view = LayoutInflater.from(context).inflate(R.layout.rv_footer, parent, false)
FooterViewHolder(view)
}
else -> throw IllegalArgumentException("Invalid View Type")
}
}
override fun getItemCount(): Int {
return numberList.size + 1
}
override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
if(holder is ItemViewHolder){
holder.numberBarText.text = numberList[position]
}
if(holder is HeaderViewHolder){
holder.cardView.radius = 50f
}
}
override fun getItemViewType(position: Int): Int {
if(position == 0) {
return TYPE_HEADER
}
return TYPE_ITEMS
}
inner class HeaderViewHolder(itemView: View): BaseViewHolder<View>(itemView) {
val cardView : CardView = itemView.findViewById(R.id.profileImageCardView)
override fun bind(item: View) {}
}
inner class ItemViewHolder(itemView: View): BaseViewHolder<View>(itemView) {
val numberBarText = itemView.findViewById<TextView>(R.id.numberBarText)
override fun bind(item: View) {}
}
inner class FooterViewHolder(itemView: View): BaseViewHolder<View>(itemView) {
override fun bind(item: View) {}
}
}
更新:
在将我的RecyclerView与BottomNavigationView结合后,页脚和页眉出现了故障。需要更加稳固的解决方案,而不仅仅是像这样向arraylist添加字符串:numberList.add("VIEW_TYPE_FOOTER")