Как выполнить нумерацию страниц с помощью модификации для получения следующих элементов из API при прокрутке в kotlin? - PullRequest
0 голосов
/ 14 января 2020

Я хочу, чтобы мой просмотрщик разбирал страницы с помощью модернизации. Я уже завершил получение Json данных, используя модернизацию. Это означает, что интерфейс API является правильным из Документа API. Тем не менее, если я загрузил более 20 пунктов. не может прокрутить больше элементов в клиенте. когда я проверил данные сервера. за одну страницу можно получить максимум 20 пунктов. Например, если я загрузил 25 пунктов в моем обзоре переработчика. стр. 0: 20, стр. 1: 5. если я хочу прокрутить все элементы, как я могу сделать прокрутку страниц для модификации ?? проверьте мой код и помогите мне ..

Ответ

enter image description here

Интерфейс API

@GET("/store/cart/mine")
    fun getCart(@Header("Authorization") token: String?, @Query("page") page:Int): Call<CartResponse>

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
    }

  }

1 Ответ

0 голосов
/ 14 января 2020

Во-первых, вам нужно изменить свой адаптер, чтобы иметь возможность обновлять существующие данные, вместо того, чтобы создавать новый адаптер каждый раз, когда вы получаете новые данные.

Адаптер должен быть инициализирован перед получением данных, чтобы можно было вызывать методы для него. Вы должны создать метод внутри адаптера, что-то вроде

fun updateData(results: MutableList<cartDocs>) { dataSet.addAll(results) notifyItemRangeInserted(start, newItemsSize) }

Затем мы получим ответ от сервера в onSuccess(), вы должны вызвать метод выше и увеличить page, поэтому при следующей загрузке данных вы получите новые элементы.

Данные должны выбираться в первый раз, когда экран загружается (page будет 0), а затем, когда пользователь прокручивает до нижней части RV ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...