簡體   English   中英

如何使用Retrofit在recyclerView中正確加載更多項目? (科特琳)

[英]How to properly load more items in a recyclerView, using Retrofit ? (kotlin)

我真的是Android Dev的新手,實際上我正在Kotlin從事一個個人項目,使用改造來進行API調用。

我已經在應用程序上實現了infiniteScroll ,但是這里的問題是,當我點擊頁面底部時,我的項目被新項目替換。

我不想這種行為,我希望每個項目都可以相互堆疊而不丟失先前的項目。

在我的片段中,這是我用來重新填充視圖的函數:

    private fun getPopularMovies(page: Int){
        val repository = MoviesRepositoryProvider.provideMovieRepository()
        repository.getPopularMovies(page)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe ({ result ->
                moviesAdapter = MovieAdapter(movies = result.results)
                moviesList.adapter = moviesAdapter
            }, { error ->
                error.printStackTrace()
            })
    }

問題在這里:

.subscribe ({ result ->
   moviesAdapter = MovieAdapter(movies = result.results)
   moviesList.adapter = moviesAdapter
}

您正在為每個api響應創建一個新適配器。 您只想設置一次適配器。 然后,您可以將結果傳遞給每個響應的同一適配器,然后調用notifyDatasetChanged()

就像是:

// Initial adapter set
moviesAdapter = MovieAdapter()
moviesList.adapter = moviesAdapter

// Then on callback
.subscribe ({ result ->
   moviesList.addResults(result.results)
}

然后在適配器內部,將新結果添加到列表中,並調用adapter.notifyDataSetChanged()

https://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()

@ veritas1是正確的,但是要正確糾正我的錯誤,我必須這樣做:

所有這些都在我的片段中。

首先聲明適配器,以及將包含我的信息的數組:

    private var moviesAdapter: MovieAdapter? = null
    private var movies = ArrayList<Movie>()

在回調中,接受上一個請求,然后調用notifyDataSetChanged()

    movies.addAll(result.results)
    moviesAdapter!!.notifyDataSetChanged()

由於我使用的是recyclerView,因此必須正確設置適配器

    private fun initRecyclerView(){
        moviesList.apply {layoutManager = layoutMng}
        moviesList.adapter = moviesAdapter
        moviesList.addOnScrollListener(
            InfiniteScrollListener({getPopularMovies(page)},{nextPage()}, layoutMng))
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM