setOnItemClickListener ne fonctionne pas avec Spinner. Voici mon code ...
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);
}
});
setOnItemClickListener ne fonctionnera pas avec spinner. Essayez d'utiliser cette méthode:
setOnItemSelectedListener
Changez votre code comme suit:
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
}
});
1. Je pense que vous devriez vérifier votre fichier XML qui contient le spinner. Assurez-vous que vous n'avez pas défini Android:clickable = "false"
.
2. vérifiez votre adaptateur spinner et assurez-vous que, dans votre méthode getView(int position, View convertView, ViewGroup parent)
, vous n'avez défini aucun événement de rappel de clic de widget tel que Button
, Imageview
, TextView
OnItemSelectedListener()
a un but différent de celui qui est un écouteur de clics. Plus important encore, il ne se déclenche pas si vous cliquez à nouveau sur l'élément actuellement sélectionné. Dans certains cas, cela pourrait ne pas être un problème, mais dans d'autres, cela pourrait bien être le cas. La vraie solution n'est donc pas de dire aux gens d'utiliser un auditeur différent et probablement inapproprié, mais de résoudre le problème initial. :-)
Heureusement, nous pouvons également placer l’auditeur de clics sur l’adaptateur:
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;
}
}
et alors nous pouvons l'utiliser comme d'habitude, avec la seule différence de ne pas le régler sur le cône mais sur l'adaptateur à la place:
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);
Je suis peut-être en train de faire fausse route, mais j'ai pensé vous suggérer d'utiliser OnItemSelectedListener
qui est plus large que OnItemClickListener
pour 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
}
});
Utilisez getItemAtPosition:
supplier.getItemAtPosition(position).toString();
Utilisez ceci
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
}
});
j'ai fait face à ces problèmes. setOnItemClickListener ne fonctionnera pas avec spinner. Ma solution est la suivante:
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) {
}
});
Je pense que supplier
dans votre code signifie spinner
, remplacez cette ligne
String msupplier=supplier.getSelectedItem().toString();
avec la ligne ci-dessous:
String msupplier= supplier.getItemAtPosition(position).toString();