Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 如何在kotlin中滚动时使用改型从API获取下一个项目来分页?_Android Studio_Kotlin_Android Recyclerview_Pagination - Fatal编程技术网

Android studio 如何在kotlin中滚动时使用改型从API获取下一个项目来分页?

Android 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

我想使用改装使我的recyclerview分页滚动。 我已经完成了使用改型获取Json数据。这意味着API文档中的接口API是正确的。 但是,如果我加载了20多个项目。无法在客户端中滚动更多项目。 当我检查服务器数据时。每页最多可获取20个项目。 例如,如果我在我的recyclerview中加载了25项。 第0:20页,第1:5页。 如果我想滚动所有项目,如何进行分页滚动以进行改装?? 检查我的一些代码并帮助我

回应

接口API

@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底部()时,应首次提取数据