处理Spinner初始化和onItemSelected回调

时间:2014-08-04 12:00:40

标签: android listview initialization spinner

我曾经用每行不同的元素动态填充表格布局,其中包括一个微调器。 为了处理微调器值的初始化,我使用了最推荐的:布尔标志变量。代码就是这样的

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()处理正确的微调器初始化和用户选择。 你能否确认或反驳这种行为? 谢谢。

0 个答案:

没有答案