根据先前选择的值将数据加载到Spinners的链中

时间:2015-04-09 07:27:20

标签: android json android-spinner

我的活动中有3个微调器,我正在从json响应中加载这3个微调器的数据。

第一个微调器(crustSP)从json响应中直接获取数据。 第二个微调器(SizeSP)数据取决于从第一个微调器和 第三个微调器(extraDescriptionOneSP)数据取决于从第二个微调器中选择的内容。

我的问题是它在第二个SP内部崩溃,因为我在活动开始时没有选择任何值(我已经在代码中显示为评论),我该如何克服这个?我应该在哪里有那段代码。当我硬编码sizeSp的位置时,它会继续崩溃。

crust = Utils.removeDuplicatesFromList(crust);
            ArrayAdapter<String> dataAdapterCru = new ArrayAdapter<String>(
                    this, android.R.layout.simple_spinner_item, crust);
            dataAdapterCru
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            crustSP.setAdapter(dataAdapterCru);

            crustSP.setOnItemSelectedListener(new MyOnItemSelectedListener(
                    ActivityPizzaCustomize.this) {

                public void onNothingSelected(AdapterView<?> arg0) {
                }

                @Override
                public void onItemSelected(AdapterView<?> parent,
                        View view, int position, long id) {

                    String crustSelectedItem = crustSP.getSelectedItem()
                            .toString();

                    List<String> resultDescription = getFilteredDescriptions(
                            crustSelectedItem, sizeDescription);
                    sizeSP.setOnItemSelectedListener(new MyOnItemSelectedListener(
                            ActivityPizzaCustomize.this) {

                        public void onNothingSelected(AdapterView<?> arg0) {
                        }

                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view, int position, long id) {

                            String sizeSelectedItem = sizeSP
                                    .getSelectedItem().toString(); // it crashes here since I haven't selected any value

                            List<String> resultTopping = getFilteredToppings(
                                    sizeSelectedItem, topDescription);

                            extraDescriptionOneSP
                                    .setOnItemSelectedListener(new MyOnItemSelectedListener(
                                            ActivityPizzaCustomize.this));
                            ArrayAdapter<String> dataAdapterExtraDesOne = new ArrayAdapter<String>(
                                    ActivityPizzaCustomize.this,
                                    android.R.layout.simple_spinner_item,
                                    resultTopping);
                            dataAdapterExtraDesOne
                                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                            extraDescriptionOneSP
                                    .setAdapter(dataAdapterExtraDesOne);
                            extraDescriptionOneSP
                                    .setAdapter(new NothingSelectedSpinnerAdapter(
                                            dataAdapterExtraDesOne,
                                            R.layout.contact_spinner_row_nothing_selected,
                                            ActivityPizzaCustomize.this));
                        }

                    });

                    ArrayAdapter<String> dataAdapterDes = new ArrayAdapter<String>(
                            ActivityPizzaCustomize.this,
                            android.R.layout.simple_spinner_item,
                            resultDescription);
                    dataAdapterDes
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    sizeSP.setAdapter(dataAdapterDes);
                    sizeSP.setAdapter(new NothingSelectedSpinnerAdapter(
                            dataAdapterDes,
                            R.layout.contact_spinner_row_nothing_selected,
                            ActivityPizzaCustomize.this));
                }
            });

这是我过滤项目的方式,

List<String> getFilteredDescriptions(String crustSelectedItem,
            List<String> sizeDescription) {
        List<String> resultDescription = new ArrayList<String>();
        crustSelectedItem = crustSP.getSelectedItem().toString();

        if (sizeDescription == null || sizeDescription.isEmpty())
            return resultDescription;

        for (int i = 0; i < sizeDescription.size(); i++) {
            sizeDescription = Utils.removeDuplicatesFromList(sizeDescription);
            if (!sizeDescription.get(i).contains(crustSelectedItem))
                continue;

            resultDescription.add(sizeDescription.get(i));
        }

        return resultDescription;
    }

    List<String> getFilteredToppings(String sizeSelectedItem,
            List<String> topDescription) {
        List<String> resultTopping = new ArrayList<String>();
        sizeSelectedItem = sizeSP.getSelectedItem().toString();

        if (topDescription == null || topDescription.isEmpty())
            return resultTopping;

        for (int i = 0; i < topDescription.size(); i++) {
            topDescription = Utils.removeDuplicatesFromList(topDescription);
            if (!topDescription.get(i).contains(sizeSelectedItem))
                continue;

            resultTopping.add(topDescription.get(i));
        }

        return resultTopping;
    }

2 个答案:

答案 0 :(得分:0)

你必须在另一个内部调用onItemSelectedListner,比如,,

    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> parent, View view,
                        int position, long id) {
                    // TODO Auto-generated method stub

                         Arraylist2.add((String)spinner1.getItemAtPosition(position));

//Some Code/Ligic here
                    spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {

                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view, int position2, long id) {
                            // TODO Auto-generated method stub
                            Arraylist3.add((String) spinner2.getItemAtPosition(position2));

                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                            // TODO Auto-generated method stub111

                        }
                    });

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // TODO Auto-generated method stub

                }
            });

希望它有所帮助...

答案 1 :(得分:0)

试试吧.. 在设置onItemSelectedListener ..

之前输出此代码
spin1.setSelection(0, false);