1
votes

Fonction d'écoute de spinner OnItemSelectedListener sans cliquer sur le spinner

J'ai une activité Recherche avancée, avec un spinner qui contient toutes les catégories de ma base de données. Lorsque je crée l'activité, ce spinner appelle onSetItemListener en boucle. Pourquoi?

J'essaie d'utiliser onTouchListener mais je ne fonctionne pas, peut-être que j'échoue quelque chose.

if(risultato.getCategoria().getSottocategorie().toArray() != null && risultato.getCategoria().getSottocategorie().toArray().length != 0){
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, risultato.getCategoria().getSottocategorie().toArray());
            }else{
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, categoriaVuota);
            }
            spinnerCategoria.setAdapter(adapterSpinnerCategoria);



 public void spinnerChange(AdapterView<?> parent){
        if(!parent.getSelectedItem().toString().equals("Sottocategorie vuote")) {
            ricercaAvanzata.setCategoria((Categoria) parent.getSelectedItem());
            setArticoli();
        }
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        spinnerChange(parent);
    }

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



 public void setListener() {
        spinnerCategoria.setOnItemSelectedListener(this);
    }


public class ActivityRicercaAvanzata extends AppCompatActivity implements AdapterView.OnItemSelectedListener { .... }

Je m'attends à ce que lorsque je clique sur le spinner, appeler onItemSelected pas avant

p>


0 commentaires

3 Réponses :


0
votes

D'après ce que je peux voir, vous étendez AdapterView.OnItemSelectedListener. Vous ne pouvez pas l'étendre car OnItemSelectedListener est une interface, pas une classe.

Ce que vous devriez faire est de l'implémenter à la place, comme ceci:

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //Your implementation here
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        //Your implementation here
    }

Ensuite, vous pouvez définissez OnItemSelectedListener sur le Spinner,

spinnerCategoria.setOnItemSelectedListener(this);

Et la dernière étape serait d'écrire l'implémentation pour les méthodes remplacées,

MyActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

}


1 commentaires

Désolé, j'implémente AdapterView.OnItemSelectedListener mais j'écris s'étend dans cette rubrique. Désolé pour mon erreur :( Je fais comme vous l'avez dit mais ne fonctionne pas :( Quand je crée ce spinner, il appelle cette action (onItemSelected) dans une boucle, jusqu'à ce que pas trouvé une autre sous-catégorie, et il s'arrête. Mais je dois choisir pour expample: Matériel -> CPU -> INTEL -> Logiciel Etc -> Antivirus -> etc Mais ce spinner prend la position 0, et passe en boucle et quand je crée une activité, il n'affiche qu'un processeur Intel car il est à la position 0 dans le spinner à chaque fois .



1
votes

J'utilise Spinner pour la sélection du pays pour l'enregistrement des utilisateurs. veuillez voter pour ma réponse.

Spinner spcountry;
String  country;

//in onCreare
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

spcountry = (Spinner) findViewById(R.id.country);
        final String[] countryNames = getResources().getStringArray(R.array.countries_array);
        ArrayAdapter aa = new ArrayAdapter(this, android.R.layout.simple_spinner_item, countryNames);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //Setting the ArrayAdapter data on the Spinner
        spcountry.setAdapter(aa);


spcountry.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Log.v("item", (String) parent.getItemAtPosition(position));
                if (position == 0) {

                    return;
                } else
                    country = countryNames[position];
                //Toast.makeText(getBaseContext(),country,Toast.LENGTH_SHORT).show();

            }

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


1 commentaires

Ne fonctionne pas :( Quand j'appelle ma méthode pour mettre à jour un filtre, cela va en boucle :( J'ai besoin d'une méthode pour ajouter à Set en première position un élément.



0
votes

Ok, marque comme résolu thx. Je crée une nouvelle liste et je convertis mon ensemble en liste. Après cette opération, j'ajoute un élément nul à la première position, et quand j'appelle onItemSelected, je le fais

si (position! = 0) alors // faire quelque chose

L'activité commence toujours à la position 0 puis doit attendre mon clic et mon choix. Merci à tous de m'aider.


0 commentaires