2012-01-11 72 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; 
相關問題