0

アプリに単純なif-elseステートメントがありますが、機能していません。スピナーで「」を選択すると、その日だけを編集できます。すべての日を編集できるため、機能していません。誰かが理由を教えてもらえますか?

final String[] items={"Day","Date","Time","Location"};

    mSpin2.setOnItemSelectedListener(
        new OnItemSelectedListener() {
            @Override
            public void onItemSelected(
                AdapterView<?> parent2, View view, int pos, long id
            ) {
String strsel=items[pos];
if(strsel.equalsIgnoreCase("Day")) {
    btnChangeDate.setFocusable(false);
    btnChangeDate.setEnabled(false);
    //btnChangeDate.setClickable(false);
    btnChangeTime.setFocusable(false);
    btnChangeTime.setEnabled(false);
    //btnChangeTime.setClickable(false);
    mLatitude.setFocusable(false);
    mLatitude.setEnabled(false);
    mLongitude.setFocusable(false);
    mLongitude.setEnabled(false);
} else {
    mMonday.setFocusable(true);
    mMonday.setEnabled(true);
    mTuesday.setFocusable(true);
    mTuesday.setEnabled(true);
    mWednesday.setFocusable(true);
    mWednesday.setEnabled(true);
    mThursday.setFocusable(true);
    mThursday.setEnabled(true);
    mFriday.setFocusable(true);
    mFriday.setEnabled(true);
    mSaturday.setFocusable(true);
    mSaturday.setEnabled(true);
    mSunday.setFocusable(true);
    mSunday.setEnabled(true);
} 

String strsel2=items[pos];
if(strsel2.equalsIgnoreCase("Date")) {
    mMonday.setFocusable(false);
    mMonday.setEnabled(false);
    mTuesday.setFocusable(false);
    mTuesday.setEnabled(false);
    mWednesday.setFocusable(false);
    mWednesday.setEnabled(false);
    mThursday.setFocusable(false);
    mThursday.setEnabled(false);
    mFriday.setFocusable(false);
    mFriday.setEnabled(false);
    mSaturday.setFocusable(false);
    mSaturday.setEnabled(false);
    mSunday.setFocusable(false);
    mSunday.setEnabled(false);
    btnChangeTime.setFocusable(false);
    btnChangeTime.setEnabled(false);
    //btnChangeTime.setClickable(false);
    mLatitude.setFocusable(false);
    mLatitude.setEnabled(false);
    mLongitude.setFocusable(false);
    mLongitude.setEnabled(false);                           
} else {
    btnChangeDate.setFocusable(true);
    btnChangeDate.setEnabled(true);
}

String strsel3=items[pos];
if(strsel3.equalsIgnoreCase("Time")) {
    mMonday.setFocusable(false);
    mMonday.setEnabled(false);
    mTuesday.setFocusable(false);
    mTuesday.setEnabled(false);
    mWednesday.setFocusable(false);
    mWednesday.setEnabled(false);
    mThursday.setFocusable(false);
    mThursday.setEnabled(false);
    mFriday.setFocusable(false);
    mFriday.setEnabled(false);
    mSaturday.setFocusable(false);
    mSaturday.setEnabled(false);
    mSunday.setFocusable(false);
    mSunday.setEnabled(false);
    btnChangeDate.setFocusable(false);
    btnChangeDate.setEnabled(false);
    //btnChangeDate.setClickable(false);
    mLatitude.setFocusable(false);
    mLatitude.setEnabled(false);
    mLongitude.setFocusable(false);
    mLongitude.setEnabled(false);
} else {
    btnChangeTime.setFocusable(true);
    btnChangeTime.setEnabled(true);
}

String strsel4=items[pos];
if(strsel.equalsIgnoreCase("Location")) {
    mMonday.setFocusable(false);
    mMonday.setEnabled(false);
    mTuesday.setFocusable(false);
    mTuesday.setEnabled(false);
    mWednesday.setFocusable(false);
    mWednesday.setEnabled(false);
    mThursday.setFocusable(false);
    mThursday.setEnabled(false);
    mFriday.setFocusable(false);
    mFriday.setEnabled(false);
    mSaturday.setFocusable(false);
    mSaturday.setEnabled(false);
    mSunday.setFocusable(false);
    mSunday.setEnabled(false);
    btnChangeDate.setFocusable(false);
    btnChangeDate.setEnabled(false);
    //btnChangeDate.setClickable(false);
btnChangeTime.setFocusable(false);
btnChangeTime.setEnabled(false);
//btnChangeTime.setClickable(false);
} else {
    //mLatitude.setFocusable(true);
    mLatitude.setEnabled(true);
    //mLongitude.setFocusable(true);
    mLongitude.setEnabled(true);
} 
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {}
    }
);
4

1 に答える 1

0

わかりました。コードをもう一度確認しました。明らかでないことをしている、またはelse使用すべきケースを使用していないかのどちらかです。いずれにせよ、あなたはあなたが得ている結果が間違っていることを知っています。以下のパターンの後にリスナーを書き直すことをお勧めします。実際の要件に基づいて微調整する必要がある場合があります。

static final int dayIndex  = 0;
static final int dateIndex = 1;
static final int timeIndex = 2;
static final int locIndex  = 3;

public void onItemSelected( AdapterView<?> parent2, View view, int pos, long id ) {
    mMonday.setFocusable( pos == dayIndex );
    mMonday.setEnabled( pos == dayIndex );
    mTuesday.setFocusable( pos == dayIndex );
    mTuesday.setEnabled( pos == dayIndex );
    mWednesday.setFocusable( pos == dayIndex );
    mWednesday.setEnabled( pos == dayIndex );
    mThursday.setFocusable( pos == dayIndex );
    mThursday.setEnabled( pos == dayIndex );
    mFriday.setFocusable( pos == dayIndex );
    mFriday.setEnabled( pos == dayIndex );
    mSaturday.setFocusable( pos == dayIndex );
    mSaturday.setEnabled( pos == dayIndex );
    mSunday.setFocusable( pos == dayIndex );
    mSunday.setEnabled( pos == dayIndex );

    btnChangeDate.setFocusable( pos == dateIndex );
    btnChangeDate.setEnabled( pos == dateIndex );

    btnChangeTime.setFocusable( pos == timeIndex );
    btnChangeTime.setEnabled( pos == timeIndex );

    mLatitude.setEnabled( pos == locIndex );
    mLongitude.setEnabled( pos == locIndex );
} 

上記のコードは、スピナーで最初の項目(日)を選択した場合はmMonday..mSundayを有効にし、それ以外の場合は無効にします。2番目の項目(日付)を選択すると、btnChangeDateが有効になります...など。意図を正しく推測し、このコードが機能する場合、if / then / else構造の理解にかなりの欠陥があり、それを読みたい。

于 2012-12-26T23:47:28.783 に答える