kotlin Recycler查看分页
Posted
技术标签:
【中文标题】kotlin Recycler查看分页【英文标题】:kotlin RecyclerView Pagination 【发布时间】:2018-12-28 05:00:48 【问题描述】:我需要让我的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()
我不知道,我必须使用什么或在哪里输入。
【问题讨论】:
见developer.android.com/topic/libraries/architecture/paging和codelabs.developers.google.com/codelabs/android-paging/… 3 Android RecyclerView Load More On Scroll Examples 【参考方案1】:尝试将此滚动侦听器与您的 recyclerview
一起使用。
在加载更多项目时,放置您的逻辑以加载更多项目。
如果没有要加载的项目,isLastPage
将返回 true。
isLoading
在您获取数据时为真,在您获取数据时为假。
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)
【讨论】:
如果你愿意,你可以在 android studio 中使用 ctrl+shift+altr+k 在 kotlin 中转换它,我可以给你一个 kotlin 可以的话请帮忙 非常感谢,但我仍然不知道热到 sed (var layoutManager: LinearLayoutManager) : RecyclerView.OnScrollListener() 从 recyclerView?.addOnScrollListener 到构造函数 我的意思是我将输入什么 (your_layoutManager) 我做了,但没有工作,请在 whatsapp 中与我交谈【参考方案2】:class MainActivity : AppCompatActivity()
private var results = mutableListOf<MovieDetails>()
lateinit var adapter: MovieAdapter
private var pageNum = 1
var page = -1
var isLoading = false
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adapter = MovieAdapter(this@MainActivity, results)
recycler_view.adapter = adapter
val layoutManager = LinearLayoutManager(this@MainActivity)
recycler_view.layoutManager = layoutManager
getMovies()
// RecyclerView Pagination********************************
recycler_view.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)
pageNum++
getMovies()
super.onScrolled(recyclerView, dx, dy)
)
private fun getMovies()
val movie: Call<Movies> = MovieService.movieInstance.getTrending(pageNum)
movie.enqueue(object : Callback<Movies>
override fun onResponse(call: Call<Movies>, response: Response<Movies>)
val m = response.body()
if (m != null)
page = m.page
results.addAll(m.results)
adapter.notifyDataSetChanged()
override fun onFailure(call: Call<Movies>, t: Throwable)
)
【讨论】:
虽然欢迎对旧问题的新答案,但如果您可以edit 您的答案并添加关于您的代码如何以更好/不同的方式解决问题的解释,那就更好了到接受的答案。以上是关于kotlin Recycler查看分页的主要内容,如果未能解决你的问题,请参考以下文章
Android Kotlin:null 不能转换为非 null 类型 com.android.app.ui.category.CategoryAdapter.ViewHolder 想要在 recycl
Recycler View 和 DialogFragment 苦苦挣扎(Kotlin)
我似乎无法将我的Kotlin Recycler多视图代码整理出来