ようへい

2012年4月21日土曜日

Hello, Views (Spinner編)

Spinner | Android Developers
http://developer.android.com/intl/ja/resources/tutorials/views/hello-spinner.html JavaScriptのセレクトオブジェクト、C#等のコンボボックスですね。
HelloSpinnerというプロジェクトを作成します。
res/layout/main.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="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/planet_prompt"
    />
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/planet_prompt"
    />
</LinearLayout>
res/values/strings.xmlを開き、以下のように変更します。
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, HelloSpinnerActivity!</string>
    <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>
HelloSpinnerActivity.javaを開き、以下のように変更します。
package jp.blogspot.logroid.helloSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class HelloSpinnerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.planets_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
}
Spennerのアイテムが選択された際にアプリケーションに通知を行うコールバックメソッドを定義します。 HelloSpinnerActivity.javaを開き、以下のように変更します。
package jp.blogspot.logroid.helloSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class HelloSpinnerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.planets_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
          Toast.makeText(parent.getContext(), "The planet is " +
              parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }

        public void onNothingSelected(@SuppressWarnings("rawtypes") AdapterView parent) {
          // Do nothing.
        }
    }
}
MyOnItemSelectedListenerをSpennerに登録します。 HelloSpinnerActivity.javaを開き、以下のように変更します。
package jp.blogspot.logroid.helloSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class HelloSpinnerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.planets_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
    }

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
          Toast.makeText(parent.getContext(), "The planet is " +
              parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }

        public void onNothingSelected(@SuppressWarnings("rawtypes") AdapterView parent) {
          // Do nothing.
        }
    }
}
実行します。
今回出てきたキーワードについて解説。
Spenner
JavaScriptでのセレクトオブジェクト、C#でのコンボボックス
setDropDownViewResource
Spennerで表示されるビューを指定
simple_spinner_dropdown_item
Androidで定義されているレイアウトファイルのID
setDropDownViewResourceにセットすると、項目の隣にラジオボタンのようなオブジェクトが表示される
setOnItemSelectedListener
Spennerのアイテムがセレクトされた際のイベントリスナ登録
getItemAtPosition
選択されたビューの取得
@SuppressWarnings
Javaのアノテーション
parentがraw型とのことで、警告が発生したため、@SuppressWarnings("rawtypes")を追記。
これで警告を無効化できます。
関連記事

0 件のコメント:

コメントを投稿