我在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);
}
//
}
}
答案 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) {
}
});
}
}