我有一个checkbox和一个spinner
checkbox选中的时候弹出spinner的下拉列表
如果这个时候按【返回】键取消了下拉列表,那需要把checkbox设置为未选中状态。现在我不知道如何监听下拉列表被取消,请大家支支招。

解决方案 »

  1.   

    你应该能知道下拉列表被弹出吧,弹出了你设置一个标记
    然后按返回键时 在keydown方法中判断标记;如果是spinner将要消失 那么你设置checkbox状态
    spinner显示时,默认按返回键就是消失的吧
      

  2.   

    这个还真不知道……下拉列表有可能是CheckBox弹出来的,也有可能是直接触摸弹出来的。如果是直接触摸弹出来的,就不知道了。有办法判断当前下拉列表是弹出的么?或者有相关事件?
      

  3.   

    已用用onTouch事件解决了。
    在onTouch的ACTION_UP的时候弹出下拉列表,并返回true即可。完整代码如下:
    checkbox.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                // 这里弹出下拉列表,并返回true避免事件继续
                if (!checkbox.isChecked()) {
                    spinner.performClick();
                    return true;
                }
            }
            return false;
        }
    });checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!isChecked) {
                spinner.setSelection(0);
            }
        }
    });spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            checkbox.setChecked(position > 0);
        }    @Override
        public void onNothingSelected(AdapterView<?> parent) {}
    });