我有两个spiners,第一个微调器是一个Integer数组,第二个是2D字符串数组。
ArrayAdapter adapter1,adapter3;
String selectedsection;
Integer selectedsem;
Integer[] semester= new Integer[] {1, 2, 3, 4, 5};
String[][] subject=new String[][]{{"m1"},{"m2"},{"m3"},{"m4"},{"m5"},{"m6"},{"m7"},{"m8"}};
adapter1 = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, semester);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_item);
sp1.setAdapter(adapter1);
sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedsem = (Integer)parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
adapter3 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subject[selectedsem]);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_item);
sp3.setAdapter(adapter3);
sp3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedsubject = parent.getItemAtPosition(position).toString();
Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), selectedsubject, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
应用程序崩溃,因为找不到selectedsem
的值。那么,如何从第一个微调器获取selectedsem
的值在第二个微调器中使用它。
希望这个问题能被理解!
答案 0 :(得分:0)
尝试在另一个函数中创建第二个适配器并在第一个适配器生成后立即调用它,我的意思是尝试安排两个任务不是异步而不是异步
答案 1 :(得分:0)
原因是因为它是Integer它可以为null并且你在初始化时尝试使用它并且还没有选择任何东西你可能会得到nullpointerexception所以最好在初始化时给它一个默认值0或者什么
然后在用户选择项目后为第二个微调器创建适配器。
您可以将第二个适配器创建在onItemSelected
下sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedsem = semester[parent.getSelectedItemPosition()];
//second adapter code goes here
ArrayAdapter<String> adapterNew = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_spinner_item, subject[selectedsem]);
sp3.setAdapter(adapterNew);
Toast.makeText(getApplicationContext(),String.valueOf(selectedsem),Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
我们只是在用户在(OnItemSelected)第一个微调器中选择一些值之后更新第二个微调器。
答案 2 :(得分:0)
这种情况正在发生,因为第一个微调器/
的方法onItemSelected
只有在微调器实际被用户选中时才会被调用。因此,当您尝试实例化OnItemSelectedListener
时,adapter3
仍然为空。要解决此问题,您必须将所有代码放在预期selectedsem
之后才能获得值,就在实际获取值之后,即:selectedsem
方法内部。像这样:
onItemSelected