現在、以下のような形でプログラムを組んでいます。
(定義などは表記外の部分でやっていますのでエラーはありません)
AdapterView.OnItemSelectedListener itemSelectedListener = new
AdapterView.OnItemSelectedListener () {
@Override public void onItemSelected(AdapterView<?> parent, View
view,int position, long id) {
}
@Override public void onNothingSelected(AdapterView<?> arg0) {
}
} ;
@Override
public void onCreate(Bundle savedInstanceState) {
spinner = new Spinner(this);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(itemSelectedListener) ;
上記のような形にして、spinner で選択したアイテムを
itemSelectedListener の onItemSelected で取得しているのですが、
前回選択したアイテム以外のアイテム(マーカーがOFFのもの)を
選択する場合には正常に上記メソッドが呼ばれるのですが、
前回選択したアイテム(マーカーがONのもの)を選択すると、
上記のonItemSelectedが呼ばれません。onNothingSelected
も呼ばれないようです。
これは spinner の仕様なのでしょうか。
もしくは、前回と同じアイテムを選択した事を検出する方法は
ほかに存在するでしょうか。
ご存知の方いらっしゃいましたら、是非ご教授ください。
よろしくお願いします。
> 上記のような形にして、spinner で選択したアイテムを
> itemSelectedListener の onItemSelected で取得しているのですが、
> 前回選択したアイテム以外のアイテム(マーカーがOFFのもの)を
> 選択する場合には正常に上記メソッドが呼ばれるのですが、
> 前回選択したアイテム(マーカーがONのもの)を選択すると、
> 上記のonItemSelectedが呼ばれません。onNothingSelected
> も呼ばれないようです。
>
> これは spinner の仕様なのでしょうか。
仕様だと思います。
Spinner(AdapterView)が、OnItemSelectedListenerを呼ぶのは、選択した項目
の位置か、または項目のIDが変わってれば、、、と言う条件ですので、選択した
項目に変更がなければイベントは起こりません。
> もしくは、前回と同じアイテムを選択した事を検出する方法は
> ほかに存在するでしょうか。
すみません。これはわかりません。選択が変更されなくても処理をするという
シチュエーションがよくわかっていないので、、、どういう処理をお考えですか?
もしかすると、いい解決策があるかもしれません。
--
Keiji,
ml_an...@c-lis.co.jp