Skip to content

Instantly share code, notes, and snippets.

View SamueldaCostaAraujoNunes's full-sized avatar
🏠
Working from home

Samuel da Costa Araujo Nunes SamueldaCostaAraujoNunes

🏠
Working from home
View GitHub Profile
@ExperimentalPagingApi
class CharacterRemoteMediador (
private val name: String,
private val dao: CharacterDao,
private val service: CharacterService
) : RemoteMediator<Int, java.lang.Character>() {
override suspend fun load(
loadType: LoadType,
state: PagingState<Int, java.lang.Character>
fun getCharacters(query: String): Flow<PagingData<java.lang.Character>> = Pager(
config = PagingConfig(
pageSize = 20,
enablePlaceholders = false
),
pagingSourceFactory = { dao.getPagingSource("%$query%") },
remoteMediator = CharacterRemoteMediador(query, dao, service)
).flow
fun characters(query: String): LiveData<PagingData<Character>> =
characterRepository.getCharacters(query).cachedIn(viewModelScope).asLiveData()
package br.com.samuelnunes.rickandmortyapp.ui.characters
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.paging.ExperimentalPagingApi
class MainViewModel : ViewModel() {
private val _query = MutableLiveData<String>()
val query: LiveData<String> = _query
val onQueryTextListener = object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
if (query != null) {
_query.postValue(query.lowercase())
}
private val viewModel by viewModels<MainViewModel>()
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main_activity, menu)
val item = menu?.findItem(R.id.search)
val searchView = item?.actionView as SearchView
searchView.setOnQueryTextListener(viewModel.onQueryTextListener)
return super.onCreateOptionsMenu(menu)
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:icon="@drawable/ic_search"
android:title="Pesquise o personagem"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom" />
</menu>
viewModel.characters().observe(viewLifecycleOwner) {
adapter.submitData(lifecycle, it)
}
class CharacterAdapter : PagingDataAdapter<Character, CharacterAdapter.CharacterViewHolder>(CharacterAdapter)