Android studio 如何在kotlin中滚动时使用改型从API获取下一个项目来分页?
我想使用改装使我的recyclerview分页滚动。 我已经完成了使用改型获取Json数据。这意味着API文档中的接口API是正确的。 但是,如果我加载了20多个项目。无法在客户端中滚动更多项目。 当我检查服务器数据时。每页最多可获取20个项目。 例如,如果我在我的recyclerview中加载了25项。 第0:20页,第1:5页。 如果我想滚动所有项目,如何进行分页滚动以进行改装?? 检查我的一些代码并帮助我 回应 接口APIAndroid studio 如何在kotlin中滚动时使用改型从API获取下一个项目来分页?,android-studio,kotlin,android-recyclerview,pagination,Android Studio,Kotlin,Android Recyclerview,Pagination,我想使用改装使我的recyclerview分页滚动。 我已经完成了使用改型获取Json数据。这意味着API文档中的接口API是正确的。 但是,如果我加载了20多个项目。无法在客户端中滚动更多项目。 当我检查服务器数据时。每页最多可获取20个项目。 例如,如果我在我的recyclerview中加载了25项。 第0:20页,第1:5页。 如果我想滚动所有项目,如何进行分页滚动以进行改装?? 检查我的一些代码并帮助我 回应 接口API @GET("/store/cart/mine") fun
@GET("/store/cart/mine")
fun getCart(@Header("Authorization") token: String?, @Query("page") page:Int): Call<CartResponse>
@GET(“/store/cart/mine”)
fun getCart(@Header(“Authorization”)标记:String?,@Query(“page”)页面:Int):调用
CartViewActivity
class CartViewActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {
private val lastVisibleItemPosition: Int
get()= LinearLayoutManager.HORIZONTAL
private lateinit var scrollListener: RecyclerView.OnScrollListener
lateinit var mAdapter: CartItemRecyclerAdapter
@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cart_view)
val page = 0
val token = SharedPreference.getTokenInfo(this)
Client.retrofitService.getCart(token,page).enqueue(object :Callback<CartResponse> {
override fun onResponse(call: Call<CartResponse>, response: Response<CartResponse>) {
if (response?.isSuccessful == true) {
swipeRefreshLo.setOnRefreshListener(this@CartViewActivity)
showdata(response.body()?.docs!!)
}else if(response?.isSuccessful==false) {
val er = Gson().fromJson(response.errorBody()?.charStream(), ErrorResponse::class.java)
if (er.code==60202) {
}
}
}
override fun onFailure(call: Call<CartResponse>, t: Throwable) {
}
})
}
private fun showdata(results: MutableList<cartDocs>) {
recycler_view.apply {
mAdapter=CartItemRecyclerAdapter(context,context as Activity, results)
recycler_view.adapter=mAdapter
recycler_view.layoutManager=LinearLayoutManager(context)
setRecyclerViewScrollListener()
}
}
private fun setRecyclerViewScrollListener() {
scrollListener = object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
val totalItemCount = recyclerView.layoutManager!!.itemCount
if(totalItemCount == lastVisibleItemPosition + 1) {
Log.d("MyTAG", "Load new list")
recyclerView.removeOnScrollListener(scrollListener)
}
}
}
}
override fun onRefresh() {
swipeRefreshLo.isRefreshing = false
}
}
class CartViewActivity:AppCompatActivity(),SwipeRefreshLayout.OnRefreshListener{
private val lastVisibleItemPosition:Int
get()=LinearLayoutManager.HORIZONTAL
私有lateinit变量scrollListener:RecyclerView.OnScrollListener
lateinit var mAdapter:CartItemRecyclerAdapter
@RequiresApi(Build.VERSION\u code.N)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u cart\u视图)
val page=0
val token=SharedReference.getTokenInfo(此)
Client.service.getCart(令牌,页面).enqueue(对象:回调{
覆盖fun onResponse(调用:调用,响应:响应){
如果(响应?.isSuccessful==true){
swipeRefreshLo.setOnRefreshListener(this@CartViewActivity)
showdata(response.body()?.docs!!)
}否则如果(响应?.isSuccessful==false){
val er=Gson().fromJson(response.errorBody()?.charStream(),ErrorResponse::class.java)
如果(er.code==60202){
}
}
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
}
})
}
私人娱乐秀数据(结果:可变列表){
回收器_view.apply{
mAdapter=CartItemRecyclerAdapter(上下文、作为活动的上下文、结果)
回收器\u视图.适配器=mAdapter
回收器\视图.布局管理器=线性布局管理器(上下文)
setRecyclerViewScrollListener()
}
}
private fun setRecyclerViewScrollListener()的{
scrollListener=object:RecyclerView.OnScrollListener(){
覆盖CrollStateChanged(recyclerView:recyclerView,newState:Int){
super.onScrollStateChanged(recyclerView、newState)
val totalItemCount=recyclerView.layoutManager!!.itemCount
如果(totalItemCount==lastVisibleItemPosition+1){
Log.d(“MyTAG”,“加载新列表”)
RecycleView.removeOnScrollListener(scrollListener)
}
}
}
}
重写onRefresh(){
swipeRefreshLo.isRefreshing=false
}
}
首先,您需要修改适配器以更新现有数据,而不是在每次获取新数据时创建新适配器
适配器应该在获取数据之前进行初始化,以便能够对其调用方法。
您应该在适配器内创建一个方法,如
fun updateData(结果:可变列表){
dataSet.addAll(结果)
notifyItemRangeInserted(开始,newItemsSize)
}
然后,我们在onSuccess()
中从服务器获得响应,您应该调用上面的方法,并递增页面
,这样下次加载数据时,您就可以得到新的项
当屏幕加载(页面
将为0),然后当用户滚动到RV底部()时,应首次提取数据