2012-01-11 67 views
2

我找不到如何在mono中执行此操作的示例。微调控件OnItemSelectedListener

任何帮助?

编辑:添加代码

foreach (equip item in list) 
    { 
     tr = new TableRow(this); 

     sp = new Spinner(this); 
     sp.LayoutParameters = lp2; 
     sp.Adapter = adapter;         
     sp.ItemSelected += new EventHandler<ItemEventArgs>(spinner_ItemSelected()); 
     sp.SetSelection(Convert.ToInt32(item.status)); 
     tr.AddView(sp); 
    } 

private void spinner_ItemSelected(object sender, ItemEventArgs e) 
    { 
     Spinner spinner = (Spinner)sender; 

     string toast = string.Format ("You selected {0}", spinner.GetItemAtPosition (e.Position)); 
     Toast.MakeText (this, toast, ToastLength.Long).Show(); 
    } 

回答

8

单声道Android的很多听众接口已经被翻译成C#的活动,包括这一个。在这种情况下,您可以挂接到ItemSelected事件,而不必创建侦听器。 Xamarin有一个完整的例子,使用可用的微调器here

编辑:

根据您的要求进行区分时,微调值实际上已经改变了,你可以这样做:

int initialSpinnerPosition = spinner.SelectedItemPosition; 
spinner.ItemSelected += (sender, args) => 
         { 
          if (args.Position != initialSpinnerPosition) 
          { 
           // do stuff 
          } 
         }; 
+0

谢谢。这似乎工作,除非我需要它不会触发事件OnCreate。请参阅我基于SQL查询动态生成spinners,并将在OnCreate期间将spinner的值设置为先前选定的存储在DB中的值。如果用户选择了不同的东西,我需要事件才会在此之后触发。 – jmease 2012-01-11 21:59:40

+0

当事件触发时,您可以检查新值与原始值是否已更改。 – 2012-01-11 22:05:27

+0

我想我的问题是如何做到这一点。一旦数值发生变化,我如何将它与不再存在的数值进行比较?我已经添加了我的代码,让您更好地了解我在做什么 – jmease 2012-01-11 22:09:27

2

您可以像使用

bool userClick = false; 

spinner.ItemSelected += (sender, e) => { 
      if(userClick) { 
       --- do stuff 
      } 
      userClick = true; 
     }; 
标签

当您基于SQL数据创建/更新spinners适配器时

userClick = false; 
相关问题