setOnItemClickListener не работает с Android Spinner

setOnItemClickListener не работает с Android Spinner. Вот мой код:

supplier.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    // TODO Auto-generated method stub

                    String msupplier=supplier.getSelectedItem().toString();
                    Log.e("Selected item : ",msupplier);

                }
            });

Ответ 1

setOnItemClickListener не будет работать с Android Spinner. В качестве альтернативы попробуйте использовать этот метод:

setOnItemSelectedListener

Измените свой код следующим образом:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                String msupplier=supplier.getSelectedItem().toString();

                Log.e("Selected item : ",msupplier);
}

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

Ответ 2

1. Я думаю, вы должны проверить свой XML файл, содержащий прядильщик. Убедитесь, что не установлены android:clickable = "false".

2., пожалуйста, проверьте свой адаптер-конвертор и убедитесь, что в вашем методе getView(int position, View convertView, ViewGroup parent) вы не установили какое-либо событие обратного вызова clickget, например Button, Imageview, TextView

Ответ 3

OnItemSelectedListener() служит другой цели, чем прослушиватель кликов. Самое главное, что он не срабатывает, если вы снова нажмете на текущий выбранный элемент. В некоторых случаях это может быть не проблема, но в других случаях это вполне может быть. Поэтому реальный ответ заключается не в том, чтобы заставить людей использовать другого и, вероятно, неподходящего слушателя, а для решения исходной проблемы.: -)

К счастью, вместо этого мы можем разместить на адаптере клика:

public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter {
  protected OnItemClickListener listener;

  public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) {
    super();

    this.listener = listener;
  }

  @Override
  public View getDropDownView(final int position, View convertView, final ViewGroup parent) {
    if (convertView == null)
      convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false);

    convertView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (listener != null)
          listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position));
      }
    });


    // ...

    return convertView;
  }
}

а затем мы можем использовать его, как обычно, с той лишь разницей, что вместо этого он не будет установлен на счетчике, а на адаптере:

Spinner spinner = (Spinner) findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO
  }
});
spinner.setAdapter(spinnerAdapter);

Ответ 4

Я, возможно, ухожу с курса, но подумал предложить вам использовать OnItemSelectedListener, который шире OnItemClickListener для Spinners:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        //do something here
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        //optionally do something here
    }
});

Ответ 5

Использовать getItemAtPosition:

supplier.getItemAtPosition(position).toString();

Ответ 6

Используйте этот

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

Ответ 7

Я думаю, что supplier в вашем коде означает spinner, do Замените эту строку

 String msupplier=supplier.getSelectedItem().toString();

с приведенной ниже строкой:

 String msupplier= supplier.getItemAtPosition(position).toString(); 

Ответ 8

Я столкнулся с этими проблемами. setOnItemClickListener не будет работать со счетчиком. Мое решение таково:

mSpinnerYears.setAdapter(adapter);
    mSpinnerYears.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Logger.d(new StringBuilder(2).append("TAG:").append(TAG).toString(),
                    new StringBuilder(3).append("click pos = ").append(position).append(
                            mSpinnerYears.getItemAtPosition(position).toString()).toString());
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });