2013-02-13 2 views
1

У моего приложения есть счетчик с четырьмя входами в него. Мне нужно иметь возможность получить, какая из этих меток выбрана, а не сами метки. Ниже мой частичный код для этого:Метод getSelectedItemPosition() Spinner возвращает неожиданные результаты

// Set up the activity's Spinner 
    spinnerAdapter = ArrayAdapter.createFromResource(this, R.array.pay_periods, android.R.layout.simple_spinner_item); 
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    Spinner s = (Spinner) findViewById(R.id.main_spinner_payperiod); 
    s.setAdapter(spinnerAdapter); 

В более поздний метод:

switch(payPeriod.getSelectedItemPosition()){ 
    case(0): // Daily 
     dailyAllowance = Float.parseFloat(payment.getText().toString()); 
    case(1): // Weekly 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/7; 
    case(2): // Bi-weekly 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/14; 
    case(3): // 30 days 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/30; 
    case(Spinner.INVALID_POSITION): 
     dailyAllowance = 0; 
    default: 
     dailyAllowance = 42; // Junk value, for debugging purposes 
    } 

Этот метод всегда кажется, не возвращать 42, независимо от того, какой из элементов прядильщика я выбрал. Может ли кто-нибудь помочь мне понять, почему? Спасибо!

ответ

5

Положите break в вашем случае переключения состояния

switch(payPeriod.getSelectedItemPosition()) { 

    case(0): // Daily 
     dailyAllowance = Float.parseFloat(payment.getText().toString()); 
    break; 

    case(1): // Weekly 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/7; 
    break; 

    case(2): // Bi-weekly 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/14; 
    break; 

    case(3): // 30 days 
     dailyAllowance = (Float.parseFloat(payment.getText().toString()))/30; 
    break; 

    case(Spinner.INVALID_POSITION): 
     dailyAllowance = 0; 
    break; 
    default: 
     dailyAllowance = 42; // Junk value, for debugging purposes 
    break; 
} 

Опуская break в включение случае условие может дать неправильное поведение. Если выбрано значение case (без break), поток все еще продолжается, и всегда выполняется условие default.

+0

Я видел некоторые успешные применения операторов switch-case с перерывами, а некоторые без них. Можете ли вы объяснить, почему? – Argus9

+0

Обновлен ответ – Geros

+0

Отличный ответ, спасибо! – Argus9

Смежные вопросы