2012-04-03 1 views
0

オンラインの機能に関するドキュメントが見つかりませんでした。Googleはリモートでも役立つものは何も見つかりませんでした。私は元のコードを見つけようとしましたが、失敗しました。(とにかくそれを理解できたのかどうかは疑問です。)誰もこの関数が実際に何をしているか知っています。どの「アイテムID」が返されますか?MonoDroidのGetItemIdAtPositionは何を返しますか?

GetItemAtPositionがアイテムに含まれる文字列を返すと、GetItemIdAtPositionは "name"属性の内容を返す可能性があると考えました。しかし、それはいつものように期待通りではありません。

私はこれに基づいて、スピナーを使用:

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(); 
} 

出力「を選択アクション:posの3に戻る選択肢がスピナーから選択されたときに出力のために乾杯を使用して

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

1 ID 1 "などとする。言い換えれば、spinner.GetItemIdAtPosition(e.Position)の返品はe.Positionと同じであるようです。

サイドノート:アプリは、このスピナーのチュートリアル:http://docs.xamarin.com/android/tutorials/User_Interface/spinnerに基づいています。ドロップダウンリストの項目がその位置以外で識別できるかどうかを調べるために、上記のビットを採用しました。

答えて

0

アダプタのGetItemId(int position)によって返された値を返します。ここに例を示します。

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]; 
    } 
} 

項目を選択すると、それはアダプタによって返された値を示し、されて何が起こる:それはhttp://docs.xamarin.com/android/tutorials/User_Interface/spinnerチュートリアルに基づいています。この例では、各位置にランダムな値を使用しました。 2番目の項目を選択すると、2番目の位置の_newIds配列の値が返されます。これは7です。

+0

ありがとうございます。 ID値がどこから来るのか知っていますか?今のところ私は試してみて、 "名前"の値などを抽出するためにあなたの例を使用できるかどうかを確認します。 – Armatus

+0

'ArrayAdapter.CreateFromResource(...)'メソッドを使ってアダプタを取得した場合、pos-0の項目のid-Idとして位置を使用すると思います。項目1のidは1です。のアダプターがこれを行います。たぶん誰かがコメントできますか? – Matthew

+2

ArrayAdapterのコードを見ると、getItemId()メソッドが単に位置を返すことがわかります。https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter java#L354 –

関連する問題