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) {
}
});