我曾经用每行不同的元素动态填充表格布局,其中包括一个微调器。 为了处理微调器值的初始化,我使用了最推荐的:布尔标志变量。代码就是这样的
public class spinnerHandling implements OnItemSelectedListener{
public void dynamicallyPopulateTableLayout(int a){
...
//initialize spinner with default values
mySpinner.setSelection(a);
mySpinner.setTag(true);
mySpinner.setOnItemSelectedListener(this);
...
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if(!(Boolean)parent.getTag()){
//my code
...
}
parent.setTag(false);
}
}
这很好用。 后来我决定使用List View而不是Table Layout。为此,我有一个自定义ArrayAdapter使用行布局,当然我有一个Spinner,填充列表视图。对于那些熟悉列表视图的人,了解其复杂的动态行为,会知道布尔标志方法的某种静态转向不会起作用。 在试图找到解决此问题的方法的三天头痛之后,我遇到了微调器的isDirty()方法,与isPressed(),isSelected()等相反,实际上在选择微调器项时更改其布尔值按用户。 代码是这样的:
public class spinnerHandling implements OnItemSelectedListener{
public void dynamicallyPopulateListView(int a){
...
//initialize spinner with default values
mySpinner.setSelection(a);
mySpinner.setOnItemSelectedListener(this);
...
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if(!parent.isDirty()){
//my code
...
}
}
}
这似乎工作正常! 但我想确保isDirty()处理正确的微调器初始化和用户选择。 你能否确认或反驳这种行为? 谢谢。