W tagach masz MySQL
, więc najpierw krótkie słowo wstępu. Jedyny de facto rodzaj relacyjnych baz danych jaki Android wspiera lokalnie to SQLite
. Jeżeli faktycznie chcesz korzystać z MySQL
, czy czegoś innego niż SQLite
, to musisz trzymać te dane na serwerze. Teortycznie możesz się bezpośrednio podłączyć do takiej bazy danych z poziomu Androida, ale nie jest to ani wygodne, ani bezpieczne, ani skalowalne, ani elastyczne. To, co musiałbyś zrobić w takim przypadku, to wystawić serwis, który byłby w stanie zwracać do aplikacji dane za pomocną np. HTTP i RESTa. Jeżeli elementów jest naprawdę dużo, to najlepiej, żeby endpoint zwracający te elementy wspierał paginację. Jeśli nie musi to być MySQL, to możesz skorzystać np. z Firebase.
Zakładając jednak, że to wyżej to bullshit i chodzi Ci o lokalną bazę danych, to można to rozwiązać za pomocą lokalnej bazy. Aplikacja może wtedy pytać się bazy o kolejne elementy i dodawać je do listy wyświetlania. Jeżeli chodzi natomiast o tworzenie 20 ImageView
to tego się tak nie robi, ponieważ byłoby to bardzo niewydajne. Zamiast tego stosuję się pulę widoków.
Przykładowo - załóżmy że mamy w bazie 2000 elementów, ale na ekranie mieści się tylko 5. Po pierwsze, na początku pobieramy z bazy tylko 50 (ilość jest arbitralna, ale dużo mniejsza niż 2000), żeby nie ładować wszystkiego naraz do pamięci i w miarę szybko wyświetlić listę na ekranie. Aby ekran był zawsze zapełniony musimy utworzyć tylko 5 ImageView
. Użytkownik w pewnym momencie zaczyna przewijać listę. Zamiast tworzyć kolejny ImageView
, usuwamy zawartość starego i podmieniamy ją na tę, która ma się zaraz wyświetlić. W parktyce tworzy się kilka widoków więcej niż tyle, ile mieści się na ekranie, żeby mieć jakiś margines i nie było skoków podczas przewijania. Użytkownik dalej przewija tę listę i w pewnym momencie jest już blisko końca. W tym momencie prosimy bazę danych o kolejne 50 elementów, które możemy dodać do listy i tak w kółko, aż elementy się nie skończą.
Jeżeli miałbym polecić komponenty, z których można na szybko skorzystać w Androidzie, żeby zastosować to, co opisałem, to zainteresuj się:
-
RecyclerView
- Widok służący do wyświetlania wielu elementów o jednolitej strukturze. Nie korzystaj z ListView
. Jest to przestarzały komponent, który został całkowicie wyparty przez RecyclerView
i może być traktowany jako relikt przeszłości. Bardzo ważna rzecz, o której ludzie mam wrażenie, że nigdy nie słyszeli, jak z nimi rozmawiam - razem z RecyclerView
korzystaj z DiffUtils
! I nie korzystaj z tego na głównym wątku.
-
Room - Warstwa abstrakcji nad
SQLite
, która zdecydowanie ułatwia pracę z bazą danych.
-
Paging library - Biblioteka służąca do stopniowego pobierania danych. Ma bardzą dobrą integrację z dwoma poprzednimi komponentami.
Hmmmm... informacji trochę dużo, ale akurat poruszyłeś taki temat.