web-dev-qa-db-fra.com

setOnItemClickListener ne fonctionne pas avec Spinner

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

                }
            });
12
Sonu

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

            }
        });
46
Ebin Sebastian

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

5
Joe

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);
4
Gábor

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
    }
});
3
waqaslam

Utilisez getItemAtPosition: 

supplier.getItemAtPosition(position).toString();
1
Anurag Shukla

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

        }
    });
1
Chirag Patel

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

        }
    });
0
Hai Rom

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(); 
0
Avadhani Y