![](/img/trans.png)
[英]how can I No Rewrite items when load more in recyclerview kotlin?
[英]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.