1

私のアプリには、4つのエントリを持つスピナーがあります。実際のラベル自体ではなく、これらのラベルのどれが選択されているかを取得できる必要があります。以下はこれを行うための私の部分的なコードです:

// 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を返すようです。誰かが私が理由を理解するのを手伝ってくれる?ありがとうございました!

4

1 に答える 1

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;
}

breakswitch-case条件で省略すると、間違った動作をする可能性があります。case(なし)が選択された場合breakでも、フローは続行され、default条件は常に実行されます。

于 2013-02-13T00:38:57.307 に答える