Android MVP jak nie zepsuć architektury

0

Cześć, piszę aplikację do skanowania barcodow. Zaimplementowałem sobie MVP takie jak w googlesamples. Używam jakiejś biblioteki z githuba, która udostępnia customowy widok służący do skanowania tych kodów. Jako, że jest to widok wsadziłem jego instancję, do mojego View( implementowane przez Fragment) i w onCreateView() tworzę tą instancję. Dodatkowo w tym Fragmencie jest jeszcze implementowany callback przechwytujący zeskanowany kod - w metodzie tej wywoluje odpowiednia metode z presentera i do tego miejsca wszystko swietnie gra.
Problem zaczyna się kiedy chcę kontrolować ten skaner. Udostępnia on metody do włączania/wyłączania flasha oraz autofocusa. Miejscem, w którym mogę to włączyć jest toolbar. Obsługa toolbara jest w Aktywności. Zrobiłem sobię klasę modelu ScannerState z tymi dwoma parametrami boolowskimi i utworzyłem jej instancję w aktywności i przekazałem do presentera. Presenter udostępnia metodę getScannerState() dzięki czemu widok może zmieniać stan skanera np podczas wracania z pauzy albo podobym przypadku.

Nie podoba mi się jednak to rozwiązanie ze widok skanera jest w widoku a jego stan w presenterze. Myślałem żeby napisać jakiś wraper w postaci kontrolera i wpakować tam i ten widok skanera i jego stan ale no nie wiem .. Macie jakieś sensowniejsze pomysly ?

Jakieś pomysły ?

0

Trudno odpowiada się na takie pytania, gdy autor nie pokazuje kodu (choćby szkieletowego). Po dwukrotnym przeczytania twojego wywodu opuściły mnie siły. Nie rozumiem twojego pytania, nie wiem co to znaczy "widok skanera jest w widoku".

0
  1. W Activity połącz tylko Presenter z View, żadnego kombinowania z logiką.

  2. Kilka aktywności i z każdej potrzebujesz dostępu do toolbara? No to superklasa i dziedziczenie, ale tak czy siak, dostęp do toolbara powinien być z Fragmentu.

  3. Rozumiem, że obsługa skanera będzie robiona z toolbara. W takim razie we Fragmencie ( część View) metoda "onToolbarClicked" czy co tam -> Presenter ( co tam masz wykonać, wysyłanie informacji do Modelu czy coś) -> Fragment metoda mająca wyłączyć skaner -> obiekt Skaner ( jakaś metoda wyłącz).

  4. Piszesz "toolbar", a czy czasem nie ma to być jakieś menu? Przecież Fragment ma dostęp do metod "setHasOptionsMenu(true);" oraz "onOptionsItemSelected(MenuItem item)" - tak, takie menu w prawej górnej części ekranu.

  5. Twój element jest tylko podelementem Fragmentu. Tak więc ma komunikować się przez Presenter. Jeśli ci się to nie podoba, no to cóż, na dobrą sprawę dla każdego buttona też można zrobić View i Presenter. Czyż nie? Różnica to tylko skala.

  6. Wstaw kod.

  7. Rzuć okiem na GraphViewWidget ( rozszerzenie zewnętrznej biblioteki dziedziczącej po klasie View, nie komunikuje się wstecz bo nie ma takiej potrzeby, ale niech będzie za przykład)
    https://github.com/GregoryIwanek/AltiMeter/tree/master/app/src/main/java/pl/gregoryiwanek/altimeter/app/recordingsession

  8. Nie wstawiaj słowa "widok" trzy razy obok siebie w pytaniu dotyczącym platformy Android.

Powodzenia!

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