有没有办法将setOnClickListener与Android Spinner一起使用?

时间:2010-08-19 14:58:45

标签: java android spinner

java.lang.RuntimeException是“不要为AdapterView调用setOnClickListener。你可能需要setOnItemClickListener,”但这不正确。我正在使用setOnItemClickListener根据新选择做一些事情,但我还需要在用户更改选择之前做一些事情。具体来说,我正在为移动到另一个选择之前需要保存到文件的每个选择收集数据,因为另一个选择与不同的数据集相关联。有没有办法将setOnClickListener与Android Spinner一起使用?

spinner.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Do some stuff before the user changes the selection
        ...

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
            // Do some stuff based onItemSelected
            ...

2 个答案:

答案 0 :(得分:9)

您可以使用ontouch事件复制onclick事件

    this.spinner=(Spinner)findViewById(R.id.spinner);
    this.spinner.setClickable(false);
    this.spinner.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.v(TAG, "spinner touch");

            //replicating a click
            if(event.getAction() == MotionEvent.ACTION_UP){
                v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
            }
            return true;
        }
    });

答案 1 :(得分:5)

您必须在微调器的基础视图(通常是带有id:android.R.id.text1的TextView)上设置Click侦听器。为此:

  • 创建自定义Spinner
  • 在构造函数(带属性)中,通过提供布局android.R.layout.simple_spinner_item
  • 来创建微调器
  • 执行findViewById(android.R.id.text1)获取TextView
  • 现在将onClickListener设置为TextView