2012-04-18 22 views
7

ユーザーがスピナー値を選択したときにonClickイベントをキャプチャします。AndroidでスピナーのonClickイベントをキャプチャする方法

私はOnClickListenerを実装し、次のコードを使用して試してみた:

@Override 
public void onClick(final View view) { 
    if (view == countrySpinner) { 
    Toast.makeText(this, "Override OK!", 3); 
    } 
} 

をととの結合:

countrySpinner.setOnClickListener(this); 

これはコンパイルが、私はOnClickListenerではなくOnItemClickListenerを使用するように私に助言RuntimeExceptionを取得AdapterViewの場合

どうすればそのonClickイベントをキャプチャできますか?

+0

'例外がはっきりわかりますようSpinner'は、クリックイベントをサポートしていません。選択イベントを使用するか、 'Spinner'を使用しないでください。 – CommonsWare

+0

@ CommonSWareでは、どうやってWebサービスからSpinnerのリストアイテムを読み込むのでしょうか?これを行うことはできませんか? –

+0

コンテンツをSpinnerにロードすることは、クリックイベントとは関係なく、Webページを生成すること以外は、ブラウザにロードされたページ自体のリンクをクリックすることと関係があります。私はあなたが「熱心に」と思っていることは考えていません。 'Spinner'の設定について質問がある場合は、新しいSOの質問を開いてください。 – CommonsWare

答えて

16

スピナーのOnClickListenerを設定する代わりに、OnTouchListenerとOnKeyListenerを設定してみてください。

spinner.setOnTouchListener(spinnerOnTouch); 
spinner.setOnKeyListener(spinnerOnKey); 

とリスナー:

private View.OnTouchListener spinnerOnTouch = new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      //Your code 
     } 
     return false; 
    } 
}; 
private static View.OnKeyListener spinnerOnKey = new View.OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
      //your code 
      return true; 
     } else { 
      return false; 
     } 
    } 
}; 
+2

あなたのコードは、すべてのタッチとキーイベントを消費することによって 'Spinner'を完全に使用できなくします。それが目的ならば、OPは単純に 'Button'を使うべきです。 – CommonsWare

+0

@CommonsWare私はこれがうまくいくことを願っています...誤って私はonTouchListenerで真を返します。それは偽であるべきです – ValayPatel

+1

私はそれが助けることを疑う。スーパークラスに正常な動作をさせたい場合は、スーパークラスにチェーンします。 – CommonsWare

10

がボタンのようなスピナーを処理しないで、ボタンがのonClickイベントがあります。スピナーはonItemSelectedイベントを持っています。

あなたはこのようにスピナーのonItemSelectedイベントをキャプチャする必要があります。

import android.widget.AdapterView; 

Spinner productname_spinner =(Spinner) findViewById(R.id.your_spinner); 

productname_spinner.setOnItemSelectedListener(
    new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 

     Object item = parent.getItemAtPosition(pos); 
     System.out.println(item.toString());  //prints the text in spinner item. 

    } 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 
関連する問題