Я создаю приложение. В котором я спрашиваю пользователя о его группе крови через счетчик, и когда пользователь выбирает группу крови, я добавляю группы крови в массив Списка, которому он может сдавать кровь. Как если он выберет группу крови O-, я добавлю всю кровь группы для массива как O- могут сдавать кровь всем. До этого все работало нормально, когда пользователь ошибочно выбирает O-, а затем выбирает A-, так что теперь, как мне удалить предыдущие группы из arrayList и добавить группы, в которые A - могу сдать кровь прямо сейчас я занимаюсь этим:

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                matchedGrpToDonate = spinner.getSelectedItem().toString();
                matchedBloodGroups();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
private void matchedBloodGroups() {
        if (matchedGrpToDonate.equals("A+")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            System.out.println("hash" + bloodBankCanDonate);
        } else if (matchedGrpToDonate.equals("A+")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("A+");
            System.out.println("hash" + bloodBankCanDonate);
        }

        if (matchedGrpToDonate.equals("A-")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            bloodBankCanDonate.add("AB-");
            bloodBankCanDonate.add("A-");
            System.out.println("hash" + bloodBankCanDonate);
        } else if (matchedGrpToDonate.equals("A-")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("A+");
            bloodBankCanDonate.remove("AB-");
            bloodBankCanDonate.remove("A-");
            System.out.println("hash" + bloodBankCanDonate);
        }

        if (matchedGrpToDonate.equals("B+")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("B+");
            System.out.println("hash" + bloodBankCanDonate);
        } else if (matchedGrpToDonate.equals("B+")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("B+");
            System.out.println("hash" + bloodBankCanDonate);
        }

        if (matchedGrpToDonate.equals("B-")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("B+");
            bloodBankCanDonate.add("AB-");
            bloodBankCanDonate.add("B-");
            System.out.println("hash" + bloodBankCanDonate);
        } else if (matchedGrpToDonate.equals("B-")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("B+");
            bloodBankCanDonate.remove("AB-");
            bloodBankCanDonate.remove("B-");
            System.out.println("hash" + bloodBankCanDonate);
        }

        if (matchedGrpToDonate.equals("O+")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            bloodBankCanDonate.add("B+");
            bloodBankCanDonate.add("O+");
            System.out.println("hash" + bloodBankCanDonate);

        } else if (matchedGrpToDonate.equals("O+")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("A+");
            bloodBankCanDonate.remove("B+");
            bloodBankCanDonate.remove("O+");
            System.out.println("hash" + bloodBankCanDonate);
        }

        if (matchedGrpToDonate.equals("O-")) {
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            bloodBankCanDonate.add("B+");
            bloodBankCanDonate.add("O+");
            bloodBankCanDonate.add("AB-");
            bloodBankCanDonate.add("A-");
            bloodBankCanDonate.add("B-");
            bloodBankCanDonate.add("O-");
            System.out.println("hash" + bloodBankCanDonate);
        } else if (matchedGrpToDonate.equals("O-")) {
            bloodBankCanDonate.remove("AB+");
            bloodBankCanDonate.remove("A+");
            bloodBankCanDonate.remove("B+");
            bloodBankCanDonate.remove("O+");
            bloodBankCanDonate.remove("AB-");
            bloodBankCanDonate.remove("A-");
            bloodBankCanDonate.remove("B-");
            bloodBankCanDonate.remove("O-");
            System.out.println("hash" + bloodBankCanDonate);
        }
    }
0
user12556987 19 Дек 2019 в 11:16

2 ответа

Попробуйте, я попытался упростить ваш код, поэтому сначала я создал группы:

    enum BloodType {
        A_PLUS,
        A_MINUS,
        AB_PLUS,
        AB_MINUS,
        B_PLUS,
        B_MINUS,
        O_PLUS,
        O_MINUS
    }

    private static final ArrayList<BloodType> APlusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.A_PLUS);
        }
    };

    private static final ArrayList<BloodType> AMinusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.A_PLUS);
            add(BloodType.AB_MINUS);
            add(BloodType.A_MINUS);
        }
    };

    private static final ArrayList<BloodType> BPlusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.B_PLUS);
        }
    };

    private static final ArrayList<BloodType> BMinusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.B_PLUS);
            add(BloodType.AB_MINUS);
            add(BloodType.B_MINUS);
        }
    };

    private static final ArrayList<BloodType> OPlusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.A_PLUS);
            add(BloodType.B_PLUS);
            add(BloodType.O_PLUS);
        }
    };

    private static final ArrayList<BloodType> OMinusCanDonate = new ArrayList<BloodType>() {
        {
            add(BloodType.AB_PLUS);
            add(BloodType.A_PLUS);
            add(BloodType.B_PLUS);
            add(BloodType.O_PLUS);
            add(BloodType.AB_MINUS);
            add(BloodType.A_MINUS);
            add(BloodType.B_MINUS);
            add(BloodType.O_MINUS);
        }
    };

Затем я проверяю входящую группу крови:

private void matchedBloodGroups(BloodType type) {

        switch (type) {

            case AB_PLUS:
            case AB_MINUS:
                return;

            case A_PLUS:
                udpateSpinnerForGroup(APlusCanDonate);
                break;

            case B_PLUS:
                udpateSpinnerForGroup(BPlusCanDonate);
                break;

            case O_PLUS:
                udpateSpinnerForGroup(OPlusCanDonate);
                break;

            case A_MINUS:
                udpateSpinnerForGroup(AMinusCanDonate);
                break;

            case B_MINUS:
                udpateSpinnerForGroup(BMinusCanDonate);
                break;

            case O_MINUS:
                udpateSpinnerForGroup(OMinusCanDonate);
                break;
        }
    }

И теперь вы можете создать метод, в котором вы устанавливаете новые данные для вашего адаптера счетчика:

public void udpateSpinnerForGroup(ArrayList<BloodType> canDonate) {
        // Update your spinner adapter with new Arraylist
    }

Надеюсь это поможет.

0
Phileas 19 Дек 2019 в 08:54

Вы можете просто добавить проверку в утверждении if, что если список массивов не пустой, очистите его и добавьте значение групп крови следующим образом:

private void matchedBloodGroups() {
        if (matchedGrpToDonate.equals("A+")) {
            if (!bloodBankCanDonate.isEmpty())
                bloodBankCanDonate.clear();
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            System.out.println("hash" + bloodBankCanDonate);
        }
        if (matchedGrpToDonate.equals("A-")) {
            if (!bloodBankCanDonate.isEmpty())
                bloodBankCanDonate.clear();
            bloodBankCanDonate.add("AB+");
            bloodBankCanDonate.add("A+");
            bloodBankCanDonate.add("AB-");
            bloodBankCanDonate.add("A-");
            System.out.println("hash" + bloodBankCanDonate);
        }

Вы можете сделать то же самое для других групп крови, но помните, что это условие только в том случае, если вы выбираете одну группу крови, которая может сдавать кровь.

1
Umair Iqbal 19 Дек 2019 в 08:26