Есть ли способ использовать setOnClickListener с Android Spinner? - PullRequest
7 голосов
/ 19 августа 2010

Исключением java.lang.RuntimeException является «Не вызывайте setOnClickListener для AdapterView. Возможно, вы хотите использовать вместо него 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 ]

9 голосов
/ 17 августа 2013

Вы можете повторить событие onclick, используя события ontouch

    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;
        }
    });
5 голосов
/ 19 августа 2010

Вы должны будете установить прослушиватель Click в базовом представлении (обычно TextView с id: android.R.id.text1) счетчика.Для этого:

  • Создайте пользовательский Spinner
  • В конструкторе (с атрибутами) создайте счетчик, предоставив макет android.R.layout.simple_spinner_item
  • Выполните findViewById (android.R.id.text1), чтобы получить TextView
  • . Теперь установите onClickListener для TextView
...