2012-04-03 6 views
0

Ich konnte keine Dokumentation für die Funktion online finden, Google fand nichts, auch nur entfernt nützlich. Ich habe versucht, den ursprünglichen Code zu finden, aber es ist fehlgeschlagen :) (Ich bezweifle, dass ich es trotzdem verstanden hätte.) Also weiß jemand, was diese Funktion eigentlich macht; Welche "Item ID" gibt es zurück?Was gibt GetItemIdAtPosition in MonoDroid zurück?

Ich dachte, dass, wenn GetItemAtPosition die in einem Element enthaltene Zeichenfolge zurückgibt, GetItemIdAtPosition möglicherweise den Inhalt eines Attributs "name" zurückgibt. Aber wie immer ist es nicht wie erwartet.

benutzen ich einen Spinner auf dieser Basis:

<string-array name="choices"> 
    <item>Choose action</item> 
    <item name="3">Back to 3</item> 
    <item name="2">Back to 2</item> 
</string-array> 

einen Toast für die Ausgabe verwenden, wenn eine Wahl aus dem Spinner ausgewählt ist:

private void choice_callback (object sender, ItemEventArgs e) { 
    Spinner spinner = (Spinner)sender; 
    string toast = string.Format ("Chosen action: {0} at pos {1} ID {2}", 
     spinner.GetItemAtPosition (e.Position), 
     e.Position, 
     spinner.GetItemIdAtPosition(e.Position)); 
    Toast.MakeText (this, toast, ToastLength.Short).Show(); 
} 

Ausgänge „Gewählte Aktion: Zurück zu 3 bei po 1 ID 1 "und ähnlich; mit anderen Worten, die Rückkehr von spinner.GetItemIdAtPosition(e.Position) scheint die gleiche zu sein wie e.Position selbst.

Randnotiz: Die App basiert auf diesem Spinner-Tutorial: http://docs.xamarin.com/android/tutorials/User_Interface/spinner. Ich habe nur die oben angezeigten Bits übernommen, um zu überprüfen, ob Elemente in einer Dropdown-Liste anders als anhand ihrer Position identifiziert werden können.

Antwort

0

Es gibt den Wert zurück, der von des Adapters zurückgegeben wurde. Hier ist ein Beispiel, das zeigt, wie. Es basiert auf dem http://docs.xamarin.com/android/tutorials/User_Interface/spinner Tutorial:

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

    SetContentView(Resource.Layout.Main); 

    Spinner spinner = FindViewById<Spinner>(Resource.Id.spinner); 

    spinner.ItemSelected += SpinnerItemSelected; 
    spinner.Adapter = 
     new MyAdapter(this, Android.Resource.Layout.SimpleSpinnerItem, 
      Resources.GetStringArray(Resource.Array.planets_array)); 
} 

private void SpinnerItemSelected(object sender, ItemEventArgs e) 
{ 
    Spinner spinner = (Spinner) sender; 
    string toast = string.Format("The planet is {0}", 
     spinner.GetItemIdAtPosition(e.Position)); 
    Toast.MakeText(this, toast, ToastLength.Long).Show(); 
} 

public class MyAdapter : ArrayAdapter 
{ 
    private int[] _newIds = new[] {9, 7, 5, 3, 1, 8, 6, 4, 2}; 

    public MyAdapter(Context context, int textViewResourceId, object[] objects) 
     : base(context, textViewResourceId, objects) 
    { 
    } 

    public override long GetItemId(int position) 
    { 
     return _newIds[position]; 
    } 
} 

Was passiert, ist, wenn Sie ein Element auswählen, zeigt es den Wert, der durch den Adapter zurückgegeben wurde. In diesem Beispiel habe ich zufällige Werte für jede Position verwendet. Wenn Sie das zweite Element auswählen, wird der Wert im Array _newIds an der zweiten Position zurückgegeben, also 7.

+0

Vielen Dank, das macht Sinn! Wissen Sie wo die ID-Werte normalerweise herkommen? Ich denke für den Moment werde ich versuchen und sehen, ob ich Ihr Beispiel verwenden kann, um die "Name" -Werte oder etwas Ähnliches zu extrahieren. – Armatus

+0

Wenn Sie die Methode 'ArrayAdapter.CreateFromResource (...)' verwenden, um den Adapter zu erhalten, denke ich, dass es die Position als ID - ID des Elements bei Pos 0 ist 0, ID von Element 1 ist 1. Ich denke alle der Adapter tun dies. Vielleicht kann jemand anderes kommentieren? – Matthew

+2

Wenn Sie sich den Code für ArrayAdapter ansehen, können Sie sehen, dass die Methode getItemId() nur die Position zurückgibt: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter. java # L354 –

Verwandte Themen