Android:动态删除依赖于其他微调器的微调器项

时间:2013-11-28 10:14:13

标签: android spinner android-arrayadapter

我的Android应用程序中有很多微调器,最初所有四个微调器都会加载默认内容。一旦用户从任何微调器中选择项目,该项目应从所有其他3个微调器中删除

我将根据 preDefQuesCount
动态生成微调器 我有arrayAdapter csAdapter。 这个方法是有效的,但是当我多次选择微调器时,内容未被正确删除,所有微调器都可以使用相同的项目。其他一些项目正在被选中而不是我选择的项目

知道可能发生的事情

我的代码

   final Spinner sQuesArray[] = new Spinner[preDefQuesCount];

    for (int i = 0; i < preDefQuesCount; i++) {

        sQuesArray[i] = allQuestionSpinner.get(i);
    }
    for (int i = 0; i < preDefQuesCount; i++) {
        sQuesArray[i]
                .setOnItemSelectedListener(new OnItemSelectedListener() {

                    @Override
                    public void onItemSelected(AdapterView<?> arg0,
                            View arg1, int arg2, long arg3) {
                        final List<String> selectedText=new ArrayList<String>();
                        System.out.println("in between "+preDefQuesCount);
                        // TODO Auto-generated method stub

                        for (int j = 0; j < preDefQuesCount; j++) {
                            System.out.println("item selected "
                                    + sQuesArray[j]
                                            .getSelectedItemPosition());
                            if (sQuesArray[j].getSelectedItemPosition() != 0) {
                                posstion[j] = sQuesArray[j]
                                        .getSelectedItemPosition();
                                selectedText.add(sQuesArray[j].getSelectedItem().toString());
                            }



                        }

                        List<String> temp = new ArrayList();


                            temp.addAll(a);
                            System.out.println("side "
                                    + preDefQuestions.size());

                            System.out.println("temp side " + temp.size());

                            for(int k=0;k<posstion.length;k++){
                                if(posstion[k]!=0){
                                temp.remove(posstion[k]);
                                }
                            }


                            for (int j = 0; j < preDefQuesCount; j++) {

                            csAdapter[j].clear();

                            csAdapter[j].addAll(new ArrayList(temp));

                            csAdapter[j].notifyDataSetChanged();





                            System.out.println(temp + " " + j);


                        }
                            temp.clear();

                    }

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

                    }

                });
    }

2 个答案:

答案 0 :(得分:0)

以下是基于第一个微调器动态更新第二个微调器的link

您可以这样做,方法是从第一个微调器中选择项目并从列表视图中删除内容并通知列表。

答案 1 :(得分:0)

当Spinner更改时,将数据放入下一个微调器的适配器内。刚写的adapter.notifyDataSetChanged();下一个微调器内的内容将会改变。

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub


                string str=spinner1.getSelectedItem().toString();
                if(str.equals("spinner item"))//spinner item is selected item of spinner1
                {
                    ArrayAdapter<String>adapter1 = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, array1);

             spinner2.setAdapter(adapter1);//pass this updated adapter1 to second spinner
                }else if{
               ArrayAdapter<String>adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array2);

             spinner2.setAdapter(adapter2);

    }
        }