spinner のsetOnItemSelectedListener の挙動について

1,796 views
Skip to first unread message

Kou Sumeragi

unread,
Feb 17, 2011, 6:48:53 AM2/17/11
to android-...@googlegroups.com
再度質問です、よろしくお願いします。

現在、以下のような形でプログラムを組んでいます。
(定義などは表記外の部分でやっていますのでエラーはありません)

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 の仕様なのでしょうか。
もしくは、前回と同じアイテムを選択した事を検出する方法は
ほかに存在するでしょうか。

ご存知の方いらっしゃいましたら、是非ご教授ください。
よろしくお願いします。

Keiji Ariyama

unread,
Feb 17, 2011, 9:01:59 AM2/17/11
to android-...@googlegroups.com, Kou Sumeragi
有山です。

> 上記のような形にして、spinner で選択したアイテムを
> itemSelectedListener の onItemSelected で取得しているのですが、
> 前回選択したアイテム以外のアイテム(マーカーがOFFのもの)を
> 選択する場合には正常に上記メソッドが呼ばれるのですが、
> 前回選択したアイテム(マーカーがONのもの)を選択すると、
> 上記のonItemSelectedが呼ばれません。onNothingSelected
> も呼ばれないようです。
>
> これは spinner の仕様なのでしょうか。

 仕様だと思います。
 Spinner(AdapterView)が、OnItemSelectedListenerを呼ぶのは、選択した項目
の位置か、または項目のIDが変わってれば、、、と言う条件ですので、選択した
項目に変更がなければイベントは起こりません。

> もしくは、前回と同じアイテムを選択した事を検出する方法は
> ほかに存在するでしょうか。
 すみません。これはわかりません。選択が変更されなくても処理をするという
シチュエーションがよくわかっていないので、、、どういう処理をお考えですか?

 もしかすると、いい解決策があるかもしれません。

--
Keiji,
ml_an...@c-lis.co.jp

Reply all
Reply to author
Forward
0 new messages