选择新的微调项时从数组中删除值

Delete Value from array when a new spinner item is selected

我正在创建 app.In 我正在通过微调器询问用户它的血型,当用户 select 一个血型时,我将血型添加到 arrayList 中,他可以向其捐赠 blood.Like 如果他 select 血型 O-,我会将所有血型添加到数组中,因为 O- 可以向 all.Till 献血,当用户错误地 select O- 然后他 selects 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);
        }
    }

您可以在 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);
        }

您可以对其他血型进行同样的操作,但请记住,此条件仅适用于您选择可以献血的血型。

试试这个,我试图简化你的代码,所以首先我创建了组:

    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
    }

希望,这对您有所帮助。