Android konwerter - spinner 'y wywołanie funkcji

0

Witam, robię na Androida konwerter - apke przeliczającą różne jednostki (czas, waga, odleglość itp.). Problem pojawia się przy activity z obliczaniem odległości. Mam dwa spinnery na jednym początkowa jednostka (np. km) i drugi z docelową jednostką (np. m). Mam kilkadziesiąt funkcji przeliczających wartości, każda z nich osobno działa dobrze. Problem leży chyba w wybieraniu tych metod ponieważ wychodzą mi jakieś dziwne wyniki, jak je przeanalizowałem to zamiast wywoływać funkcje liczącą np. metry_na_cale() wywołuje cm_na_metry().
Rozpoznawanie zrobiłem za pomocą switch & case. Macie jakiś pomysł jak to naprawić? Albo jakąś inną metodę wywoływania ?

<image>Screenshot_2016-03-03-17-24-10.png</image>

btnOblicz.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int selectedP = spinnerP.getSelectedItemPosition();
                int selectedD = spinnerD.getSelectedItemPosition();

                switch (selectedP){
                    case 0:
                        //Toast.makeText(getApplicationContext(), "SelectedP = " + selectedP, Toast.LENGTH_SHORT).show();
                        switch (selectedD) {
                            case 0:
                                if(selectedP == selectedD) {
                                    Toast.makeText(getApplicationContext(), "zmień wartość docelową", Toast.LENGTH_SHORT).show();
                                }
                                break;
                            case 1:
                                if(selectedP == 0 && selectedD == 1) {
                                    metryNaKm();
                                }
                                break;
                            case 2:
                                metryNaCm();

                                break;
                            case 3:
                                metryNaCale();

                                break;
                            case 4:
                                metryNaStopy();

                                break;
                            case 5:
                                metryNaMile();

                                break;
                            default:
                                Toast.makeText(getApplicationContext(), "Obliczanie odległości", Toast.LENGTH_SHORT).show();
                                break;
                        }
                    case 1:
                        //Toast.makeText(getApplicationContext(), "SelectedP = " + selectedP, Toast.LENGTH_SHORT).show();

                        switch (selectedD) {
                            case 0:
                                kilometryNaM();
                               // Toast.makeText(getApplicationContext(), "SelectedD = " + selectedD, Toast.LENGTH_SHORT).show();

                                break;
                            case 1:
                                if(selectedP == selectedD) {
                                    Toast.makeText(getApplicationContext(), "zmień wartość docelową", Toast.LENGTH_SHORT).show();
                                }
                              //  Toast.makeText(getApplicationContext(), "SelectedD = " + selectedD, Toast.LENGTH_SHORT).show();

                                break;
                            case 2:
                                kilometryNaCm();
                              //  Toast.makeText(getApplicationContext(), "SelectedD = " + selectedD, Toast.LENGTH_SHORT).show();

                                break;
                            case 3:
                                kilometryNaCale();
                               // Toast.makeText(getApplicationContext(), "SelectedD = " + selectedD, Toast.LENGTH_SHORT).show();

                                break;
                            case 4:
                                kilometryNaStopy();
                              //  Toast.makeText(getApplicationContext(), "SelectedD = " + selectedD, Toast.LENGTH_SHORT).show();
                                break;
                   // itp...
0

Lekcja na dziś: Strategy Pattern

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