Ok, jako niedawno początkujący przyznaje, że kwestia trzymania gdzies danych jest najbardziej problematyczna.
To co Cie powinno na początku interesować to jak ogarnąć Android + Firebase. Reszta poniżej to dodatek, mozesz to zrobić na pewno prościej.
Aplikacja będzie składała się z jednej aktywności i dwóch fragmentów(plus layouty do nich).
To co potrzebujesz:
Prosty projekt Empty Activity, dodaj dwa fragmenty i layouty do nich. W activity będzie tylko fragment container czyli aktywność zajmuje się wyświetlaniem fragmentów.
Firebase - LINK - Jako baza danych
Navigation Component - LINK - Najłatwieszy sposob dla zielonego do nawigacji w apce
Safe Args - LINK - Proste przekazywanie item id pomiędzy fragmentami
Recycler View - LINK - Wyświetlanie pobranych z Firestore danych jako lista
I milion innych rzeczy, ja bym sie nie bawil w lokalną tabelę trzymaną w aplikacji.
'Baza danych' będzie się mieściła w Firebase Firestore gdzie możesz sam załadować dane jakich potrzebujesz.
Po uruchomieniu aktywności, będzie ona 'prosiła' Firebase o pobranie danych a aktywność osadzi je w widoku Recycler View, który znajduje się w pierwszym fragmencie.
Każdy element listy Recycler View musi być klikalny, po kliknieciu w dany 'kafelek' musisz przekazać ID produktu poprzez safe args do drugiego fragmentu, który pobierze pojedynczy produkt i wyświetli jego dane.
Potrzebujesz dwóch metod z firebase, jedna do pobrania wszystkich elementów druga do pobrania konkretnego jednego produktu(czyli np funkcja jako argument przyjmująca productId: String)
Jakies tam przyklady, przyznam ze na jana:
override fun getAItems(): LiveData<List<Product>> {
val responseResult = MutableLiveData<List<Product>>()
firestore.collection(COLLECTION_PRODUCTS)
.get()
.addOnSuccessListener {
val products = it.toObjects(ProductEntity::class.java)
responseResult.value = products
}
.addOnFailureListener { e ->
Log.d("getItems", e.toString())
}
return responseResult
}
override fun getSingleItem(uid: String): LiveData<Product> {
val responseResult = MutableLiveData<Product>()
firestore.collection(COLLECTION_PRODUCTS)
.document(uid)
.get()
.addOnSuccessListener {
val productEntity = it.toObject(ProductEntity::class.java)
val product = productEntity?.let { entity ->
inputProductMapper.mapFromEntity(entity)
}
responseResult.value = product!!
}
.addOnFailureListener { e ->
Log.d("getSingleItem", e.toString())
}
return responseResult
}