SpinnerSpinner

Spinner 항목을 선택 하기 위한 드롭다운 목록을 제공 하는 위젯이입니다.Spinner is a widget that presents a drop-down list for selecting items. 이 가이드에는 뒤에 선택된 된 항목을 사용 하 여 관련 된 다른 값을 표시 하는 수정 하는 회전자의 선택 항목의 목록을 표시 하는 간단한 앱을 만드는 방법을 설명 합니다.This guide explains how to create a simple app that displays a list of choices in a Spinner, followed by modifications that display other values associated with the selected choice.

기본 회전자Basic Spinner

이 자습서의 첫 번째 부분에서는 행성 목록을 표시 하는 간단한 회전자 위젯을 만들어야 합니다.In the first part of this tutorial, you'll create a simple spinner widget that displays a list of planets. 행성을 선택 하면 알림 메시지는 선택한 항목을 표시 합니다.When a planet is selected, a toast message displays the selected item:

HelloSpinner 앱의 예제 스크린샷Example screenshots of HelloSpinner app

명명 된 새 프로젝트를 시작 HelloSpinner합니다.Start a new project named HelloSpinner.

오픈 Resources/Layout/Main.axml 다음 XML을 삽입 합니다.Open Resources/Layout/Main.axml and insert the following XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/planet_prompt"
    />
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/planet_prompt"
    />
</LinearLayout>

TextView android:text 특성 및 Spinner android:prompt 특성 모두 동일한 문자열 리소스를 참조 합니다.Notice that the TextView's android:text attribute and the Spinner's android:prompt attribute both reference the same string resource. 이 텍스트는 위젯의 제목으로 동작합니다.This text behaves as a title for the widget. 적용할 때 합니다 Spinner , 위젯을 선택 시 나타나는 선택 대화 상자에 표시할 제목 텍스트를 표시 됩니다.When applied to the Spinner, the title text will appear in the selection dialog that appears upon selecting the widget.

편집할 Resources/Values/Strings.xml 와 같이 파일을 수정 합니다.Edit Resources/Values/Strings.xml and modify the file to look like this:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloSpinner</string>
  <string name="planet_prompt">Choose a planet</string>
  <string-array name="planets_array">
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
    <item>Mars</item>
    <item>Jupiter</item>
    <item>Saturn</item>
    <item>Uranus</item>
    <item>Neptune</item>
  </string-array>
</resources>

두 번째 <string> 요소에서 참조 하는 제목 문자열을 정의 합니다 TextView Spinner 위의 레이아웃 합니다.The second <string> element defines the title string referenced by the TextView and Spinner in the layout above. 합니다 <string-array> 요소에 목록으로 표시 되는 문자열의 목록을 정의 합니다 Spinner 위젯.The <string-array> element defines the list of strings that will be displayed as the list in the Spinner widget.

이제 열 MainActivity.cs 추가한 다음 using 문:Now open MainActivity.cs and add the following using statement:

using System;

다음으로, 다음 코드를 삽입 합니다 OnCreate()Next, insert the following code for the OnCreate() 방법:method:

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

    // Set our view from the "Main" layout resource
    SetContentView (Resource.Layout.Main);

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

    spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected);
    var adapter = ArrayAdapter.CreateFromResource (
            this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);

    adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
    spinner.Adapter = adapter;
}

후 합니다 Main.axml 레이아웃 콘텐츠 보기로 설정 되어 합니다 Spinner 위젯을 사용 하 여 레이아웃에서 캡처된 FindViewById<>(int) 합니다.After the Main.axml layout is set as the content view, the Spinner widget is captured from the layout with FindViewById<>(int). CreateFromResource()The CreateFromResource() 메서드는 다음 새로 만들고 ArrayAdapter , 각 항목에 대 한 초기 모양 문자열 배열에 바인딩하는 합니다 Spinner 는 이어서 각 항목 선택 하면 스핀 상자에 표시 되는 방식 .method then creates a new ArrayAdapter, which binds each item in the string array to the initial appearance for the Spinner (which is how each item will appear in the spinner when selected). 합니다 Resource.Array.planets_array ID 참조가 합니다 string-array 위에 정의 된 및 Android.Resource.Layout.SimpleSpinnerItem ID 플랫폼에 의해 정의 된 표준 회전자 모양, 레이아웃을 참조 합니다.The Resource.Array.planets_array ID references the string-array defined above and the Android.Resource.Layout.SimpleSpinnerItem ID references a layout for the standard spinner appearance, defined by the platform. SetDropDownViewResource 위젯을 열릴 때 각 항목에 대 한 모양을 정의 하 라고 합니다.is called to define the appearance for each item when the widget is opened. 마지막으로, 합니다 ArrayAdapter 를 사용 하 여 해당 항목의 모든 연결로 Spinner 설정 하 여는 Adapter 속성입니다.Finally, the ArrayAdapter is set to associate all of its items with the Spinner by setting the Adapter property.

이제 항목에서 선택 하는 경우 응용 프로그램을 notifys는 콜백 메서드를 제공 합니다 Spinner 합니다.Now provide a callback method that notifys the application when an item has been selected from the Spinner. 이 메서드가 모양을 다음과 같습니다.Here's what this method should look like:

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

보낸 사람에 게로 캐스팅 되는 항목을 선택 하면를 Spinner 항목에 액세스할 수 있도록 합니다.When an item is selected, the sender is cast to a Spinner so that items can be accessed. 사용 하 여는 Position 속성에는 ItemEventArgs, 선택한 개체의 텍스트 찾아 표시 하는 데 사용할 수 있습니다를 Toast 합니다.Using the Position property on the ItemEventArgs, you can find out the text of the selected object, and use it to display a Toast.

응용 프로그램 실행 다음과 같이 표시 됩니다.Run the application; it should look like this:

전 세계적으로 선택 하는 Mars 사용 하 여 회전자의 스크린샷 예제Screenshot example of Spinner with Mars selected as the planet

키/값 쌍을 사용 하 여 회전자Spinner Using Key/Value Pairs

사용 하는 데 필요한 경우가 Spinner 일종의 앱에서 사용 되는 데이터를 사용 하 여 연결 된 키 값을 표시 합니다.Often it is necessary to use Spinner to display key values that are associated with some kind of data used by your app. 때문에 Spinner 작동 하지 않습니다 키/값 쌍을 사용 하 여 직접 키/값 쌍을 개별적으로 저장, 채우는 해야는 Spinner 키 값을 사용 하 여를 사용 하 여 회전자에서 선택된 된 키의 위치 관련된 데이터 값을 조회 합니다.Because Spinner does not work directly with key/value pairs, you must store the key/value pair separately, populate the Spinner with key values, then use the position of the selected key in the Spinner to look up the associated data value.

다음 단계에는 HelloSpinner 선택한 행성에 대 한 평균 온도 표시 하도록 앱을 수정 하는:In the following steps, the HelloSpinner app is modified to display the mean temperature for the selected planet:

다음을 추가 합니다 using 문을 MainActivity.cs:Add the following using statement to MainActivity.cs:

using System.Collections.Generic;

다음 인스턴스 변수를 추가 합니다 MainActivity 클래스입니다.Add the following instance variable to the MainActivity class. 이 목록에 행성 및 해당 평균 온도 대 한 키/값 쌍 유지 합니다.This list will hold key/value pairs for the planets and their mean temperatures:

private List<KeyValuePair<string, string>> planets;

OnCreate 메서드를 앞에 다음 코드를 추가 adapter 선언 됩니다.In the OnCreate method, add the following code before adapter is declared:

planets = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Mercury", "167 degrees C"),
    new KeyValuePair<string, string>("Venus", "464 degrees C"),
    new KeyValuePair<string, string>("Earth", "15 degrees C"),
    new KeyValuePair<string, string>("Mars", "-65 degrees C"),
    new KeyValuePair<string, string>("Jupiter" , "-110 degrees C"),
    new KeyValuePair<string, string>("Saturn", "-140 degrees C"),
    new KeyValuePair<string, string>("Uranus", "-195 degrees C"),
    new KeyValuePair<string, string>("Neptune", "-200 degrees C")
};

이 코드는 행성 및 해당 관련된 평균 온도 대 한 간단한 저장소를 만듭니다.This code creates a simple store for planets and their associated mean temperatures. (실제 앱에서는 데이터베이스 일반적으로 키와 연결 된 데이터를 저장 합니다.)(In a real-world app, a database is typically used to store keys and their associated data.)

위 코드 바로 다음 키를 추출 하 고 순서로 목록에 다음 줄을 추가 합니다.Immediately after the above code, add the following lines to extract the keys and put them into a list (in order):

List<string> planetNames = new List<string>();
foreach (var item in planets)
    planetNames.Add (item.Key);

이 목록에 전달 된 ArrayAdapter 생성자 (대신는 planets_array 리소스):Pass this list to the ArrayAdapter constructor (instead of the planets_array resource):

var adapter = new ArrayAdapter<string>(this,
    Android.Resource.Layout.SimpleSpinnerItem, planetNames);

수정 spinner_ItemSelected 선택한 위치에 연결 된 전 세계적으로 선택한 (온도) 값을 찾는 사용 되도록 합니다.Modify spinner_ItemSelected so that the selected position is used to look up the value (the temperature) associated with the selected planet:

private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    string toast = string.Format("The mean temperature for planet {0} is {1}",
        spinner.GetItemAtPosition(e.Position), planets[e.Position].Value);
    Toast.MakeText(this, toast, ToastLength.Long).Show();
}

응용 프로그램 실행 알림에이 같습니다.Run the application; the toast should look like this:

온도 표시 하는 전 세계 선택의 예Example of planet selection displaying temperature

자료Resources

이 페이지의 일부는 생성 하 고 Android Open Source Project에서 공유 된 조건에 따라 사용 되는 작업에 따라 수정 합니다 Creative Commons 2.5 Attribution License .Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.