#16 Praktyka czyni mistrza, czyli dopasowujemy aktywności do nowej logiki

Wspominałem w którymś wcześniejszym wpisie, że te ekrany, na których aktualnie mamy 5 prób zostaną przerobione, na takie bardziej arcadowe. O tym chciałem też dzisiaj napisać, udało mi się całkiem bezboleśnie przeprowadzić taką operację. Oto jak to wyglądało.

Po pierwsze przebudowałem trochę ekran główny dodając przycisk „Practice” i pod tym przyciskiem ukryte są kolejne aktywności:

Po drugie potrzebowałem w jakiś sposób odróżnić kiedy aktywność ma zachowywać się normalnie, a kiedy jest to ekran praktyk. Osiągnąłem to korzystając z możliwości przekazania danych w intencji. Przekazanie wygląda tak:
intent.putExtra(Const.PRACTICE, true);
a odczyt:
Intent intent = getIntent();
practice = intent.getBooleanExtra(Const.PRACTICE, false);
Czyli przekazujemy wartość boolean, przy odczycie z kolei drugi parametr oznacza wartość domyślną, czyli co tam przypisać jeśli nic nie znajdziemy.
Po trzecie, potrzebny był widok w którym mógłbym zapisywać zdobyte punkty i popełnione pomyłki, wykorzystałem istniejące już obiekty i oto jest:
Ikona zegarka w bieżącej implementacji jest ukryta, ale przyda się w przyszłości 😉 Reszta mam nadzieję jest zrozumiała i czytelna.
Po czwarte i ostatnie, implementacja. Tutaj trzeba było dodać warunek, jak aplikacja ma się zachowywać kiedy przyszła z ekranu praktyk, czyli powyżej odczytany intent Extra ma wartość true. Wklejam poniżej przykładowy kod jak to wygląda:
@Override
@OnClick(R.id.successView)
public void onClickSuccessView() {
    if (isPractice()) {
        stackBricksElementsOperation.hideStack(bricksArray);
        createReadyView();
        counterOperation.count(true);
        unFillScreen(true, true);
        screenFiled = false;
    } else {
        starsOperation.nextStar(true);
        gameCounter++;
        if (gameCounter == 5)
            nextActivity(true, ChoiceCheckActivity.this);
        else {
            stackBricksElementsOperation.hideStack(bricksArray);
            createReadyView();
            unFillScreen(true, true);
            screenFiled = false;
        }
    }
}

 

Te warunki pewnie można napisać lepiej, także pomyślę nad nimi i je poprawię, jeśli myślenie poskutkuje 😉 A na sam koniec oto jak to wygląda na jednym przykładzie:
Jak widać poszło całkiem sprawnie i bezboleśnie. Następnym krokiem będzie wykorzystanie pokazanego już tutaj zegarka, ale o tym innym razem.
Pozdrawiam!