私は次の方法でスピナーを宣言します(非常に静的なので、タイトルと値用に_array.xml
_に2つの文字列配列があります)
_<Spinner
Android:id="@+id/searchCriteria"
Android:entries="@array/searchBy"
Android:entryValues="@array/searchByValues" />
_
spinner.getSelectedItem()
は配列_[title, value]
_を返すと期待していますが、実際にはタイトル文字列のみを返します。 _Android:entryValues
_を無視していますか?タイトルではなく値を取得するにはどうすればよいですか?これはXMLのみで実行可能ですか、それともアダプターを作成してプログラムで実行する必要がありますか?
デュアルアレイメソッドではなく、既知のタイプのオブジェクトをArrayAdapterにプログラムで入力して使用するのはなぜですか。これを行う同様の性質のチュートリアル(下部のリンク)を作成しました。基本的な前提は、Javaオブジェクトの配列を作成し、スピナーにそのことを伝え、スピナークラスから直接それらのオブジェクトを使用することです。私の例では、 "State"を表すオブジェクトがあります次のように定義されます。
package com.katr.spinnerdemo;
public class State {
// Okay, full acknowledgment that public members are not a good idea, however
// this is a Spinner demo not an exercise in Java best practices.
public int id = 0;
public String name = "";
public String abbrev = "";
// A simple constructor for populating our member variables for this tutorial.
public State( int _id, String _name, String _abbrev )
{
id = _id;
name = _name;
abbrev = _abbrev;
}
// The toString method is extremely important to making this class work with a Spinner
// (or ListView) object because this is the method called when it is trying to represent
// this object within the control. If you do not have a toString() method, you WILL
// get an exception.
public String toString()
{
return( name + " (" + abbrev + ")" );
}
}
次に、次のようにこれらのクラスの配列をスピナーに追加できます。
// Step 1: Locate our spinner control and save it to the class for convenience
// You could get it every time, I'm just being lazy... :-)
spinner = (Spinner)this.findViewById(R.id.Spinner01);
// Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
Android.R.layout.simple_spinner_item, new State[] {
new State( 1, "Minnesota", "MN" ),
new State( 99, "Wisconsin", "WI" ),
new State( 53, "Utah", "UT" ),
new State( 153, "Texas", "TX" )
});
// Step 3: Tell the spinner about our adapter
spinner.setAdapter(spinnerArrayAdapter);
次のようにして、選択したアイテムを取得できます。
State st = (State)spinner.getSelectedItem();
これで、真のJavaクラスを使用できます。スピナーの値が変更されたときにインターセプトしたい場合は、OnItemSelectedListenerを実装し、イベントを処理する適切なメソッドを追加します。
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
// Get the currently selected State object from the spinner
State st = (State)spinner.getSelectedItem();
// Now do something with it.
}
public void onNothingSelected(AdapterView<?> parent )
{
}
ここでチュートリアル全体を見つけることができます: http://www.katr.com/article_Android_spinner01.php
したがって、スピナーにラベルと値の両方を含めるためにここに来た場合は、次のようにします。
Android:entries="@array/labels"
でスピナーを設定しますあなたのコードで-値が必要なときは、このようなことをしてください(チェーンする必要はありません)
String selectedVal = getResources().getStringArray(R.array.values)[spinner
.getSelectedItemPosition()];
中止、中止!何が私になったのかわかりませんが、Spinner
はAndroid:entryValues
属性をサポートしていません。これは実際にはListPreference
からのもので、同様のことを行います(ポップアップダイアログに項目のリストを表示します)。私が必要とするもののために、私は(ala)SpinnerAdapter
を使用する必要があります