首页 > 解决方案 > 如何使用 Retrofit 在 recyclerView 中正确加载更多项目?(科特林)

问题描述

我真的是 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()
            })
    }

标签: androidkotlinretrofit

解决方案


问题在这里:

.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()


推荐阅读