【发布时间】:2017-11-07 23:36:35
【问题描述】:
我有 3 个微调器,当第一个微调器更新时,应该更新第二个和第三个微调器,但只有第二个微调器正在更新。这两个检查确实被打印到 logcat,但第三个微调器没有被更新。如果我注释掉 spinner2.setAdapter() 那么第三个微调器将更新。如果我更改顺序以便首先更新第 3 个微调器,那么第 2 个微调器仍会更新,而第 3 个则不会。我哪里错了?
我正在使用下面的代码:
spinner1.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
pos = arg2;
switch(pos)
{
case 0:
allDepts.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner2.setAdapter(allDepts);
allCourses.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner3.setAdapter(allCourses);
break;
case 1:
AEDepartments.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
AEDepartments.notifyDataSetChanged();
spinner2.setAdapter(AEDepartments);
Log.v("Spinner check", "Department check.");
AECourses.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
AECourses.notifyDataSetChanged();
spinner3.setAdapter(AECourses);
Log.v("Spinner check", "Course check.");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
});
编辑: 因此,当应用程序加载时,它将显示“请选择学校”,并将显示所有部门和课程。当我单击第一个微调器并将其更改为“学校 1”时。应更新 spinner2 以仅显示学校 1 中的部门(AEDepartments 阵列适配器中的内容),并且应更新 spinner3 以便仅显示学校 1 中的课程(AECourses 阵列适配器中的内容)。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.student1);
spinner1 = (Spinner)this.findViewById(R.id.school);
spinner2 = (Spinner)this.findViewById(R.id.dept);
spinner3 = (Spinner)this.findViewById(R.id.course);
ArrayAdapter<School> allSchools = new ArrayAdapter<School>(this,
android.R.layout.simple_spinner_item, new School[] {
new School("","-- Please Select School --"),
new School("A","School 1"),
new School("B","School 2"),
new School("C","School 3")
});
allSchools.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner1.setAdapter(allSchools);
spinner1.setOnItemSelectedListener(this);
final ArrayAdapter<School> allDepts = new ArrayAdapter<School>(this,
android.R.layout.simple_spinner_item, new School[] {
new School("","-- Please Select Department --"),
new School("1","Dep1"),
new School("2","Dep2"),
new School("3","Dep3"),
new School("4","Dep4")
});
allDepts.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner2.setAdapter(allDepts);
spinner2.setOnItemSelectedListener(this);
final ArrayAdapter<School> allCourses = new ArrayAdapter<School>(this,
android.R.layout.simple_spinner_item, new School[] {
new School("","-- Please Select Course --"),
new School("C1","Couyrse1"),
new School("C2","Couyrse2"),
new School("C3","Couyrse3"),
new School("C4","Couyrse4")
});
allCourses.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner3.setAdapter(allCourses);
spinner3.setOnItemSelectedListener(this);
//Displaying all the departments in School 1
final ArrayAdapter<School> AEDepartments = new ArrayAdapter<School>(this,
android.R.layout.simple_spinner_item, new School[] {
new School("","-- Please Select Department --"),
new School("1","Dep1"),
new School("3","Dep3")
});
//Displaying all the courses in School 1
final ArrayAdapter<School> AECourses = new ArrayAdapter<School>(this,
android.R.layout.simple_spinner_item, new School[] {
new School("","-- Please Select Course --"),
new School("C1","Couyrse1"),
new School("C3","Couyrse3")
});
spinner1.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
pos = arg2;
switch(pos)
{
case 0:
allDepts.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
allCourses.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
spinner2.setAdapter(allDepts);
spinner3.setAdapter(allCourses);
Log.v("Spinner check", "Department check.");
Log.v("Spinner check", "Course check.");
break;
case 1:
AEDepartments.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
AEDepartments.notifyDataSetChanged();
spinner2.setAdapter(AEDepartments);
Log.v("Spinner check", "Department check.");
AECourses.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
AECourses.notifyDataSetChanged();
spinner3.setAdapter(AECourses);
Log.v("Spinner check", "Course check.");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
});
}
【问题讨论】:
-
我不明白。在
case 0:中,您使用的是allDepts和allCourses,但在case 1:中,您使用的是AEDepartments和AECourses。没有看到更多代码,很难提出任何建议。 -
我有几个不同的阵列适配器。最初它会显示 allDepts 和 allCourses,但是当 spinner1 更改为第一个选项时,我希望显示两个不同的数组适配器。
-
我添加了更多应该有帮助的代码。