如何更改spinner1时如何更新spinner2?

时间:2014-10-22 12:42:24

标签: android spinner

我在spinner1中有1到12的数字,而另一个spinner2我希望用前者选择的内容来控制数字。

每当用户在spinner1中选择介于1到6之间的数字时,spinner2应显示1到31之间的数字。
每当用户在spinner1中选择7到12之间的数字时,spinner2应显示1到30之间的数字。

我已经设法提出这个代码,但它似乎不像上面那样工作。能帮我找到错误吗?

package com.example.spinners;


import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {
Spinner sp1, sp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sp1 = (Spinner) findViewById(R.id.SP1);
    sp2 = (Spinner) findViewById(R.id.SP2);


      List<String> list = new ArrayList<String>();


    list.add("1");  list.add("2");  list.add("3");  list.add("4");
    list.add("5");  list.add("6");  list.add("7");  list.add("8");
    list.add("9");  list.add("10"); list.add("11"); list.add("12");

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sp1.setAdapter(dataAdapter);

    //
    sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long    id) {                

           // userSelectedIndex = position;
        }

        public void onNothingSelected(AdapterView<?> parent) {
        }
    });  


    //

    if (sp1.getSelectedItem().equals("1") || sp1.getSelectedItem().equals("2")
        || sp1.getSelectedItem().equals("3") || sp1.getSelectedItem().equals("4")
        || sp1.getSelectedItem().equals("5") || sp1.getSelectedItem().equals("6")) {


            //
          List<String> list2 = new ArrayList<String>();

            list2.add("1"); list2.add("2"); list2.add("3"); list2.add("4"); list2.add("5");
            list2.add("6"); list2.add("7"); list2.add("8"); list2.add("9"); list2.add("10");
            list2.add("11"); list2.add("12"); list2.add("13"); list2.add("14");
            list2.add("15"); list2.add("16"); list2.add("17"); list2.add("18");
            list2.add("19"); list2.add("20"); list2.add("21"); list2.add("22");
            list2.add("23"); list2.add("24"); list2.add("25"); list2.add("26");
            list2.add("27"); list2.add("28"); list2.add("29"); list2.add("30");
            list2.add("31");

            ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list2);
            dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp2.setAdapter(dataAdapter2);




       } else if(sp1.getSelectedItem().equals("7") || sp1.getSelectedItem().equals("8") || sp1.getSelectedItem().equals("9") || sp1.getSelectedItem().equals("10") || sp1.getSelectedItem().equals("11") || sp1.getSelectedItem().equals("12")) {
    /////////////////////////////////////////////////////////

    //
      List<String> list2 = new ArrayList<String>();


    list2.add("1"); list2.add("2"); list2.add("3"); list2.add("4"); list2.add("5");
list2.add("6"); list2.add("7"); list2.add("8"); list2.add("9"); list2.add("10");
list2.add("11"); list2.add("12"); list2.add("13");  list2.add("14");
list2.add("15"); list2.add("16");   list2.add("17"); list2.add("18");
list2.add("19"); list2.add("20");   list2.add("21"); list2.add("22");
list2.add("23"); list2.add("24");   list2.add("25"); list2.add("26");
list2.add("27"); list2.add("28");   list2.add("29"); list2.add("30");


    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list2);
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sp2.setAdapter(dataAdapter2);
       }
    //
}


}

1 个答案:

答案 0 :(得分:0)

代码中的问题是,在窗口打开之前,您只检查选定的值一次。每次用户更改值时都需要检查它。因此,您需要在onItemSelectedListener中使用该逻辑。这里修改了代码,但有一些改进(未经测试,但应该有效)。

public class MainActivity extends Activity {
    private Spinner sp1, sp2;

    private List<Integer> firstList = new ArrayList<Integer>();
    private List<Integer> secondList = new ArrayList<Integer>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp1 = (Spinner) findViewById(R.id.SP1);
        sp2 = (Spinner) findViewById(R.id.SP2);

        for (int i = 1; i <= 12; i++) {
            firstList.add(i);
        }

        ArrayAdapter<Integer> dataAdapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, firstList);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp1.setAdapter(dataAdapter);

        sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int currentValue = firstList.get(position);

                if(currentValue <= 6){
                    for (int i = 1; i <= 30; i++) {
                        secondList.add(i);
                    }
                } else {
                    for (int i = 1; i <= 31; i++) {
                        secondList.add(i);
                    }
                }

                ArrayAdapter<Integer> dataAdapter = new ArrayAdapter<Integer>(MainActivity.this, android.R.layout.simple_spinner_item, secondList);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                sp2.setAdapter(dataAdapter);
            }

            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }
}