RecyclerView
に10個のアイテムのみをロードし、スクロール後にさらに10個のアイテムをロードして、このように動作させる必要があります。Volley
を使用して配列にアイテムを追加しました。
これは私のRecyclerView
アダプターです。
class newsAdapter constructor(private val activety:MainActivity, private val ListOfCash:ArrayList<newsModling>,
val listener:BTNListener): RecyclerView.Adapter<newsAdapter.ViewHolder>(),BTNListener {
override fun getItemCount(): Int = ListOfCash.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.news_tick, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(ListOfCash[position], listener, ListOfCash)
}
inner class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
fun bind(Data: newsModling, listener: BTNListener, listOfnew: ArrayList<newsModling>) {
var ListOfnewsin = listOfnew[adapterPosition]
var newstitle = ListOfnewsin.title
var newsdate = ListOfnewsin.date
itemView.newsDate.text = newsdate
itemView.newsTitle.text = newstitle
itemView.setOnClickListener{
//var cashSTR = cashNumIn.toString()
}
}
}
}
何を使用しなければならないのか、どこに入力するのかわかりません。
このスクロールリスナーをrecyclerview
で使用してみてください。
より多くのアイテムをロードするには、より多くのアイテムをロードするロジックを配置します。
ロードするアイテムがない場合、isLastPage
はtrueを返します。
isLoading
は、データのフェッチ中はtrue、データのフェッチ中はfalseになります。
import Android.support.v7.widget.LinearLayoutManager
import Android.support.v7.widget.RecyclerView
/**
* Pagination class to add more items to the list when reach the last item.
*/
abstract class PaginationScrollListener
/**
* Supporting only LinearLayoutManager for now.
*
* @param layoutManager
*/
(var layoutManager: LinearLayoutManager) : RecyclerView.OnScrollListener() {
abstract fun isLastPage(): Boolean
abstract fun isLoading(): Boolean
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val visibleItemCount = layoutManager.childCount
val totalItemCount = layoutManager.itemCount
val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()
if (!isLoading() && !isLastPage()) {
if (visibleItemCount + firstVisibleItemPosition >= totalItemCount && firstVisibleItemPosition >= 0) {
loadMoreItems()
}// && totalItemCount >= ClothesFragment.itemsCount
}
}
abstract fun loadMoreItems()
}
これをrecyclerview
に追加します
var isLastPage: Boolean = false
var isLoading: Boolean = false
recyclerView?.addOnScrollListener(object : PaginationScrollListener(your_layoutManager) {
override fun isLastPage(): Boolean {
return isLastPage
}
override fun isLoading(): Boolean {
return isLoading
}
override fun loadMoreItems() {
isLoading = true
//you have to call loadmore items to get more data
getMoreItems()
}
})
fun getMoreItems() {
//after fetching your data assuming you have fetched list in your
// recyclerview adapter assuming your recyclerview adapter is
//rvAdapter
after getting your data you have to assign false to isLoading
isLoading = false
rvAdapter.addData(list)
}
recyclerview
アダプタに次のメソッドを追加します。
ここでのリストは、アダプターのrecyclerview
にフィードするリストです。recyclerview
のリストを必ず初期化してください。
fun addData(listItems: ArrayList<yourObject>) {
var size = this.listItems.size
this.listItems.addAll(listItems)
var sizeNew = this.listItems.size
notifyItemRangeChanged(size, sizeNew)
}