• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wywolanie metody (View view) Android Studio

Object Storage Arubacloud
0 głosów
772 wizyt
pytanie zadane 8 sierpnia 2018 w Java przez sambor016 Początkujący (310 p.)

Witam, problem jest tego typu mam taki kod 

 public void obliczPozyc(View view) {
        // Is the button now checked?
        int latt = 0;
        boolean checked = ((RadioButton) view).isChecked();

        // Check which radio button was clicked
        switch(view.getId()) {

            case R.id.rbMeska:
                if (checked)
                {
                    String wynik = result.getText().toString();
                    int wyn = Integer.parseInt(String.valueOf(result));

                    latt = wyn + 6 ;  //age+6
                    if (latt > 25) {
                        latt = 25;
                    }
                    if (latt < 13) {
                        latt = 13;
                    }

                }
                    break;

            case R.id.rbZenska:
                if (checked)
                {
                    String wynik = result.getText().toString();
                    int wyn = Integer.parseInt(String.valueOf(result));

                    latt = wyn - 7; //age-7

                    if (latt > 12) {
                        latt = 12;
                    }
                    if (latt < 0) {
                        latt = 0;
                    }
                }
                    break;
        }

metoda zostala utworzona wraz z utworzeniem radiobuttonow w radiogroup.

Moje pytanie jest nastepujace, chcialbym wywolac ja w innym miejscu, gdy podaje nazwe metody, wola rowniez o parametry. Co mam podac jako parametr, badz jak to ominac, tak aby View view nie bylo potrzebne?

komentarz 8 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
A co potrzebujesz z tej metody, bo zawsze możesz stworzyć jakąś dodatkową inną metodę.
komentarz 8 sierpnia 2018 przez sambor016 Początkujący (310 p.)
No wlasciwie to wszystko, bo jest to metoda ktora jest czesto uzywana. Myslalem o tym aby po prostu zamiast View view, podac parametr boolean zmienna  i sprawdzac true/false w if'ach. Mialoby to sens?

1 odpowiedź

0 głosów
odpowiedź 9 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

W tym wydaniu ta metoda niemal całkowicie zależy od parametru View. Tylko elementy w if-ach są niezależne od view, więc prawdopodobnie te bloki da się wyciągnąć do odrębnej metody. Mogłoby to wyglądać np. tak:

   public void obliczPozyc(View view)
    {
        // Is the button now checked?
        int latt = 0;
        boolean checked = ((RadioButton) view).isChecked();

        // Check which radio button was clicked

        if (checked)
        {
            switch (view.getId())
            {

                case R.id.rbMeska:
                {
                    operationForRbMeska();
                    break;
                }

                case R.id.rbZenska:
                {
                    operationForRbZenska();
                    break;
                }
            }
        }
    }

    public void operationForRbMeska()
    {
        int latt;
        String wynik = result.getText().toString();
        int wyn = Integer.parseInt(String.valueOf(result));

        latt = wyn + 6;  //age+6
        if (latt > 25)
        {
            latt = 25;
        }
        if (latt < 13)
        {
            latt = 13;
        }
    }

    public void operationForRbZenska()
    {
        int latt;
        String wynik = result.getText().toString();
        int wyn = Integer.parseInt(String.valueOf(result));

        latt = wyn - 7; //age-7

        if (latt > 12)
        {
            latt = 12;
        }
        if (latt < 0)
        {
            latt = 0;
        }
    }

Przeniosłem jeszcze to if(checked) ponad switcha ponieważ oba case to robią więc zdaje się że można to zrobić raz. Ponadto metody operationForXXX są właściwie identyczne więc można by je jeszcze jakoś uprościć.

A jeśli View jest Ci niezbędny, to trzeba zmienić go na zmienną o zasięgu klasy, tylko wtedy będzie można pozbyć się  parametru z metody.

komentarz 9 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
edycja 9 sierpnia 2018 przez mbabane

A i wcześniej jakoś na to nie zwróciłem uwagi. Takie coś:

if (latt > 12)
{
    latt = 12;
}
if (latt < 0)
{
    latt = 0;
}

W tym przypadku jest mało optymalne, dlatego że musi się wykonać każdy if, a jeśli np. pierwszy jest spełniony to automatycznie drugi nie, a i tak musi się wykonać. Trzeba by zastosować konstrukcje else if przy drugim ifie:

if (latt > 12)
{
    latt = 12;
}
else if (latt < 0) //wykona się tylko wtedy gdy pierwszy if nie będzie spełniony
{
    latt = 0;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 325 wizyt
0 głosów
0 odpowiedzi 122 wizyt
pytanie zadane 5 października 2016 w Android, Swift, Symbian przez kacperdyba Gaduła (3,290 p.)
+1 głos
1 odpowiedź 709 wizyt

92,536 zapytań

141,376 odpowiedzi

319,449 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...