Powiązanie Buttona ze Spinnerem

0

Witam, chciałbym się dowiedzieć w jaki sposób mogę powiązać działanie Buttona w zależności od tego, co będzie przez użytkownika wybrane z listy Spinnera.
Chodzi mi o to, żeby aplikacja wykonywała inne działanie w zależności od wyboru na liście. Póki co mam taki kod:

Spinner spinner;
    ArrayAdapter<CharSequence> adapter;
    Button oblicz;
    EditText a2;
    EditText a,b;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prostopadla);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        spinner = (Spinner)findViewById(R.id.spinner);
        adapter=ArrayAdapter.createFromResource(this,R.array.rodzaj_prostej,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        a=(EditText)findViewById(R.id.a);
        b=(EditText)findViewById(R.id.b);
        a2=(EditText) findViewById(R.id.a2);

        oblicz = (Button)findViewById(R.id.oblicz);

        oblicz.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                if(R.array.rodzaj_prostej==0)
                {
                    a22=a1*b1;
                    a2.setText(String.format("%.3f", a22));
                }
            }
        });

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

}
1

OnItemSelectedListener

Potem możesz kontrolować zachowanie w OnClickListener swojego przycisku za pomocą jakiejś zmiennej ustawianej przez onItemSelected(). Ewentualnie możesz ustawiać różne OnClickListenery na swoim przycisku w zależności od tego, co zostało wybrane. W sumie to drugie rozwiązanie jest ładniejsze.

0
Michał Sikora napisał(a):

OnItemSelectedListener

Potem możesz kontrolować zachowanie w OnClickListener swojego przycisku za pomocą jakiejś zmiennej ustawianej przez onItemSelected(). Ewentualnie możesz ustawiać różne OnClickListenery na swoim przycisku w zależności od tego, co zostało wybrane. W sumie to drugie rozwiązanie jest ładniejsze.

oblicz.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if(spinner.getSelectedItemPosition()==1)
                {
                    a22=a1*b1;
                    a2.setText(String.format("%.3f", a22));
                }

                if(spinner.getSelectedItemPosition()==0)
                {
                    a22=a1+b1;
                    a2.setText(String.format("%.3f", a22));
                }
            }


        });

A takie coś dlaczego nie działa?

0

Nie wiem, powinno działać bez problemu. W zasadze sprawdzanie pozycji tak, jak tu to robisz, jest najprostszym rozwiązaniem. Jakoś nie pomyślałem o tym. Powinieneś tylko robić to w switchu albo za pomocą jakiejść mapy zamiast drabinki ifów (a jak już ify, to if else).

0
Michał Sikora napisał(a):

Nie wiem, powinno działać bez problemu. W zasadze sprawdzanie pozycji tak, jak tu to robisz, jest najprostszym rozwiązaniem. Jakoś nie pomyślałem o tym. Powinieneś tylko robić to w switchu albo za pomocą jakiejść mapy zamiast drabinki ifów (a jak już ify, to if else).

W odpowiedzi zamiast dostać to, czego oczekuję, za każdym razem mam "0". Czyli tak jakby wchodzę w instrukcję if, ale nie są wykonywane obliczenia (tak sądzę).

0

Sprawdź debuggerem albo logami jakie są wartości dla spinner.getSelectedItemPosition(), a22, a1 i b1. Nie widzę żadnego powodu, dla którego pozycja adaptera miałaby być niewłaściwa. Pewnie coś z tymi współczynnikami jest skopane. Pokaż czym są i jak są ustawiane.

0
Bartek2205 napisał(a):
Michał Sikora napisał(a):

Nie wiem, powinno działać bez problemu. W zasadze sprawdzanie pozycji tak, jak tu to robisz, jest najprostszym rozwiązaniem. Jakoś nie pomyślałem o tym. Powinieneś tylko robić to w switchu albo za pomocą jakiejść mapy zamiast drabinki ifów (a jak już ify, to if else).

W odpowiedzi zamiast dostać to, czego oczekuję, za każdym razem mam "0". Czyli tak jakby wchodzę w instrukcję if, ale nie są wykonywane obliczenia (tak sądzę).

O ludzie, mózg mi się już chyba wyłączył.
Zapomniałem załączyć:

                a1 = Float.parseFloat(b.getText().toString());
                b1 = Float.parseFloat(a.getText().toString());
0

I w którym momencie to jest wywoływane? Jeżeli chcesz mieć aktualne wartości podczas kliknięcia, to powinieneś je zczytywać w OnClickListenerze. Chyba, że aktualizujesz to jakoś za pomocą TextWatcher (ale nie sądzę, bo robisz getText()).

0
Michał Sikora napisał(a):

I w którym momencie to jest wywoływane? Jeżeli chcesz mieć aktualne wartości podczas kliknięcia, to powinieneś je zczytywać w OnClickListenerze. Chyba, że aktualizujesz to jakoś za pomocą TextWatcher (ale nie sądzę, bo robisz getText()).

O tym akurat już pomyślałem i wywołuję w OnClickListener, ale dzięki wielkie za pomoc :).

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