Olá, Alex! Desculpe mais uma vez incomodar. Mas estou com um problema que não estou sabendo solucionar.
Meu ViewModel está se comunicando perfeitamente com minha view, mas estou tendo um problema com meu recyclerview, pesquisei e não encontrei nada relacionado ao problema, e pode ser que esteja errando em alguma coisa.
O problema é que quando eu giro a tela do meu recycler, ele soma a lista, duplicando os itens. E depois que eu adicionei uma paginação, após eu chegar na página 2 e viro a tela ele substitui os itens e sobe. Vc poderia me dar uma luz sobre isso?
Eu até tinha resolvido isso adicionado um: android:configChanges="orientation|keyboardHidden" no manifest. Mas isso não é uma solução boa.
interface ApiService {
@GET("search/repositories?q=language:Java&sort=stars")
suspend fun getListHome(@Query("page") page: Int): HomeResponse
}
class HomeRepository(private val client: ApiService) {
suspend fun getList(page: Int) = client.getListHome(page)
}
class NewsViewModel(private val repository: HomeRepository): ViewModel(){
val getList = MutableLiveData<Resource<HomeResponse>>()
fun fetchList(page: Int = 1) {
viewModelScope.launch {
try {
val response: HomeResponse? = repository.getList(page)
response?.let {
getList.value = Resource.Success(it)
}
} catch (e: HttpException) {
} catch (e: Throwable) {
}
}
}
}
private val viewModel by viewModel<NewsViewModel>()
private val itemAdapter by lazy {
ItemAdapter(itemList, this)
}
private fun initViewModel() {
viewModel.fetchList()
viewModel.getList.observe(this, Observer<Resource<HomeResponse>> { response ->
when (response) {
is Resource.Start -> {
}
is Resource.Success -> {
populateList(response.data.items)
showSuccess()
}
is Resource.Error -> {
}
}
})
}
private fun populateList(itemList: List<HomeResponse.Item>) {
this.itemList.addAll(itemList)
itemAdapter.notifyItemChanged(itemList.size - 29, itemList.size)
}
private fun iniUi() {
with(recycler_home) {
adapter = itemAdapter
val linearLayoutManager = LinearLayoutManager(this@MainActivity)
layoutManager = linearLayoutManager
addOnScrollListener(object : PaginationScroll(linearLayoutManager) {
override fun loadMoreItems() {
viewModel.fetchList()
progress_home.visibility = View.VISIBLE
releasedLoad = false
}
override fun isLoading(): Boolean {
return releasedLoad
}
override fun hideMoreItems() {
}
})
}
}