RecyclerView wyswietlajacy rozne listy

0

Czesc, mam pytanie do Panów Androidowców. Stworzyłem RecyclerView, który chciałbym wyświetlać w dwóch miejscach w jednym Activity, w jednym miejscu miałby wyświetlać obiekty typu X, w drugim obiekty typu Y. Czy jest jakiś sposób, by zaimplementować klasę RecyclerView tak, by jedna klasa obsługiwała dwie różne listy w zależności od sytuacji ? Czy raczej praktuje się stworzenie kolejnej klasy RecyclerView?

1

RecyclerView raczej się nie rozszerza. Z opisu nie wiem do końca co chcesz osiągnąć, ale jeśli dobrze zrozumiałem, to RecyclerView już sam z siebie to robi. Powinieneś po prostu stworzyć dwa różne adaptery. Jeden będzie podpięty do jednego RecyclerView drugi do drugiego.

2

RecyclerView wyświetla to co zbuduje adapter, wiec wystarczy mieć adapter dla obiektów X i adapter dla obiektów Y. Możesz też zrobić adapter działający na X i na Y, możesz też zrobić adapter na generykach.

0

https://paste.ofcode.org/VLkLeSzwZkkd74jBs7jcJL

Tutaj mam zaimplementowaną klasę RecyclerViewAdapter. Jak widzicie w 21 linijce przyjmuje on listę ArrayList<Income> która potem wyświetla. Pytanie jest czy w tej samej klasie jestem w stanie stworzyć drugą listę, np ArrayList<Outcome> i jakoś zaimplementować to tak, by w zależności od sytuacji korzystał z tej, lub tamtej listy, czy muszę stworzyć kolejną, osobną klasę SecondRecyclerViewAdapter, w której będzie przyjmował listę ArrayList<Outcome> ?

Chce w jednym Activity mieć dwa RecyclerView wyświetlające listy, jeden, by wyświetlał wydatki, drugi by wyświetlał dochody, wszystko w ramach jednego activity. Jako, że wydatek i dochód to są dwa różne obiekty, to nie moge ich po prostu wrzucić do tego samego RecyclerViewAdaptera, bo jest on tak zaimplementowany, że oczekuje tylko jednej, konkretnej listy z konkretnym obiektem. Pytanie, czy mogę to jakoś zmienić w tej klasie, by był gotowy obsługiwać obie listy, czy muszę stworzyć osobny adapter.

Jeśli się da to jakoś zaimplementować w ramach jednego adaptera, jaki warunek trzeba postawić w metodzie onBindViewHolder, by adapter wiedział, z której listy wyciągać elementy do wyświetlania ?

0

Mógłbyś to tak zmienić, jeśli chcesz sobie utrudnić życie. Stwórz osobny adapter dla osobnej klasy, zamiast robić sieczkę z kodu.

0

Z jednej strony masz rację, utrudnianie sobie życia itp, ale z drugiej strony to powielanie tego samego kodu, który różni się tylko listą którą przyjmuje :P Także nie wiem, które rozwiązanie jest bardziej eleganckie.

0

Jakiego tego samego kodu? Masz inne klasy Income i Outcome. Możliwe, że mają podobną strukturę danych. Czy z tego względu należy stworzyć klasę IncomeOrOutcome?

0

No IncomeRecyclerViewAdapter będzie różnił się od OutcomeRecyclerViewAdaptera tylko listą, która przyjmuje, reszta będzie identyczna. Także zastanawiałem się, czy lepszą praktyką jest przygotować adapter na obsługę różnych list, czy tworzyć nowy adapter za każdym razem. Pytanie też z pogranicza "dobrych praktyk" programowania.

Co myślicie by w Adapterze stworzyć jakiegoś inta, którego będzie się przesyłało w parametrze wywołując adapter, a potem metoda onBindViewHolder będzie sprawdzać jaka jest wartość inta i w zależności od niej wyświetlać tą, lub inną listę ? Hit or bullshit ? :D

1

Bullshit. Jeśli klasa Income z klasą Outcome nie są ze sobą powiązane poprzez interfejs lub listy nie są wyświetlane w jednym miejscu naraz, to chcesz zrobić bardzo kiepską rzecz.

Możesz ewentualnie zrobić jeden generyczny adapter, jeśli chcesz zaoszczędzić kilkanaście linijek kodu, ale w tym wypadku odbije się to pewnie kiedyś czkawką.

0

Są powiązane interfejsem. Chyba zaczynam rozumieć. Zamiast wrzucać adapterowi listę typu Income, lub Outcome, lepiej wrzucić listę typu Balance, którą implementuja obie klasy ?

1

Tak. Jeśli interfejs pozwala na dobranie się do danych, których potrzebujesz, to powinno to być ok.

0

title

No i klasa. Jeden adapter wyświetla w dwóch miejscach dwie listy :) Dzięki za pomoc Panowie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1