2013-08-28 27 views
0

我剛開始探索微調控件。我幾乎達到了我想要的,但只有最後一步不見了。這是我迄今爲止所做的。Monodroid中的微調控件 - 在選擇中獲取ID和文本

我有這個例子中一個非常簡單的類:

[Serializable] 
public class Merchant 
{ 
    public Int64 MerchantId { get; set; } 
    public String ShopName { get; set; } 

    public override string ToString() 
    { 
     return ShopName; 
    } 
} 

這裏就是我把微調的axml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="1280dip" 
    android:layout_height="800dip"> 
    <TextView 
     android:text="Select a merchant:" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/lblSelect" 
     android:layout_marginLeft="30dip" 
     android:layout_marginTop="30dip" 
     android:textSize="42dip" /> 
    <Spinner 
     android:id="@+id/spinMerchant" 
     android:layout_width="1000dip" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/lblSelect" 
     android:prompt="@string/spinner_prompt" 
     android:layout_centerHorizontal="true" 
     android:minHeight="20dip" /> 
</RelativeLayout> 

而且我的代碼是:

protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 

     // Create your application here 
     this.SetContentView(Resource.Layout.MerchantSelect); 

     List<Merchant> lstMerchant = new List<Merchant>(); 
     lstMerchant.Add (new Merchant() { ShopName = "First Shop", MerchantId = 11 }); 
     lstMerchant.Add (new Merchant() { ShopName = "Second Shop", MerchantId = 12 }); 

     Spinner spinner = this.FindViewById<Spinner>(Resource.Id.spinMerchant); 
     ArrayAdapter adapter = new ArrayAdapter (this, Android.Resource.Layout.SimpleSpinnerItem, lstMerchant); 
     spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected); 

     spinner.Adapter = adapter; 
    } 

    private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e) 
    { 
     Spinner spinner = (Spinner)sender; 
     //Merchant merch = (Merchant)spinner.SelectedItem; 
     string toast = string.Format ("Selected text is {0}", spinner.GetItemAtPosition (e.Position)); 
     Toast.MakeText (this, toast, ToastLength.Long).Show(); 
    } 

我希望在選擇後立即獲取選定的文本以及其後的ID。我收到spinner.GetItemAtPosition (e.Position)的文字,但我似乎無法找到任何可以給我ID的東西。如果我嘗試做Merchant merch = (Merchant)spinner.SelectedItem;,我會得到一個例外:Cannot convert type 'Java.Lang.Object' to 'Merchant'

請讓我知道它是如何實現的。

謝謝。

回答

0

微調只知道文本,因爲這就是你在你的ToString()方法中有它。提供微調器數據的適配器不知道它正在處理Merchant對象。 要獲得實際的商家對象,您必須讓您的List<Merchant> lstMerchant成爲您班級的成員。

然後改變你的選擇處理程序:

private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e) 
    { 
     Spinner spinner = (Spinner)sender; 
     // Get the ID from your model. 
     Merchant merch = this.lstMerchant[e.Position]; 
     var id = merch.MerchantId; 
     string toast = string.Format ("Selected text is {0}", spinner.GetItemAtPosition (e.Position)); 
     Toast.MakeText (this, toast, ToastLength.Long).Show(); 
    } 
+0

感謝隊友!儘管我希望獲得更多 - 我該說什麼 - 「支持框架」的解決方案,但這也會起作用。 –