我在recyclerview中实现了一个带有分页功能的回收视图,调用addOnScrollListner,但它没有为子回收视图触发。
下面是我实现的内容:
class NSREActivity : AppCompatActivity() {
private var previousTotal = 0
private var loading = true
private val visibleThreshold = 5
private var firstVisibleItem = 0
private var visibleItemCount = 0
private var totalItemCount = 0
private lateinit var mAdapter: RecyclerGenericKAdapter<HashTags>
private var mList: ArrayList<HashTags> = ArrayList()
private var mChildList: ArrayList<HashTags> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nsre)
initData()
//Usage of generic recycler view
mAdapter = RecyclerGenericKAdapter(mList, R.layout.item_layout, object : RecyclerKallback<HashTags> {
override fun bindData(model: HashTags, position: Int, itemView: View) {
val name = itemView.findViewById<TextView>(R.id.mainName)
val childRv = itemView.findViewById<RecyclerView>(R.id.childRecycler)
name.text = model.tag
itemView.setOnClickListener {
Toast.makeText(this@NSREActivity, model.tag, Toast.LENGTH_SHORT).show()
setChildAdapter(childRv)
}
}
})
recyclerMain.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recyclerMain.adapter = mAdapter
}
private fun setChildAdapter(child : RecyclerView){
val adt = RecyclerGenericKAdapter(mChildList, R.layout.item_sample_rv, object : RecyclerKallback<HashTags> {
override fun bindData(model: HashTags, position: Int, itemView: View) {
val name = itemView.findViewById<TextView>(R.id.text)
name.text = model.tag
itemView.setOnClickListener {
Toast.makeText(this@NSREActivity, model.tag, Toast.LENGTH_SHORT).show()
}
}
})
val mLayoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
child.layoutManager = mLayoutManager
child.adapter = adt
child.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
visibleItemCount = child.childCount
totalItemCount = mLayoutManager.itemCount
firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition()
if (loading) {
if (totalItemCount > previousTotal) {
loading = false
previousTotal = totalItemCount
}
}
if (!loading && totalItemCount - visibleItemCount <= firstVisibleItem + visibleThreshold) {
// End has been reached
Log.e("Yaeye!", "end called")
// Do something
addData()
loading = true
}
}
})
}
}我在recyclerview中实现了一个带有分页功能的回收视图,调用addOnScrollListner,但它没有为子回收视图触发。当它达到主回收器视图的最后一个索引时,它将为子回收器视图调用addOnScrollListner。
如何在带有分页的recyclerview内部调用recyclerview?
发布于 2019-02-28 16:20:37
我不确定这是否是一种合适的方式,但我也遇到了类似的问题,我设法用这种方式解决了它:
我没有检查滚动,但我正在检查最后一项何时被绑定:
class PaginationAdapter : RecyclerView.Adapter<RecyclerView.Holder> {
var lastItemCreatedHandler: (() -> Unit)? = null
...
override fun onBindViewHolder(holder: RecyclerView.Holder, position: Int) {
if (position == getItemCount() - 1) {
lastItemCreatedHandler?.invoke()
}
...
}
}然后如果应该有更多的项目,我会显示进度,下载更多的数据,等等。
https://stackoverflow.com/questions/54920460
复制相似问题