2017-08-30 2 views
0

Dans mon application android, j'ai un Spinner, et j'essaie de détecter quand un élément est sélectionné. Je sais que cela peut être fait en utilisant la méthode setOnItemSelectedListener(), mais ce que je ne comprends pas est que cela fonctionne très bien:android - Spinner setOnItemClickListener n'accepte pas la classe nommée implémentant OnItemClickListener comme paramètre

((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 
     // implement onItemClick here 
    }); 

Bien que cela donne une erreur que le paramètre est « non applicable » à Spinner:

((Spinner)findViewById(R.Id.mySpinner)).setOnItemSelectedListener(new MyOnItemSelectedListener()); 

Où est-ce MyOnItemSelectedListener, et il est une classe imbriquée dans mon MainActivity:

private class MyOnItemSelectedListener implements AdapterView.OnItemSelectedListener 
{ 
    public MyOnItemSelectedListener() {} 

    // implement onItemClick here 
} 

ce que je veux atteindre est non seulement le code qui fonctionne - je l'ai déjà t chapeau. C'est un code qui est facilement lisible (avec le vrai nom des choses dans mon code et la structure de ma classe MainActivity, il est plus lisible en utilisant une classe imbriquée qu'une classe anonyme). Comment je comprends java, ces deux devraient être la même chose essentiellement, sauf une classe a un nom, et l'autre ne le fait pas.

Répondre

1

Dans votre code, vous avez utilisé Id (R.Id.mySpinner) au lieu de id (R.id.mySpinner).

Les deux implémentations dans votre code fonctionneront définitivement.

Initialiser Spinner:

Spinner spinner = new Spinner(getActivity()); 
spinner.setOnItemSelectedListener(new MySpinner()); 

Classe interne:

private class MySpinner implements AdapterView.OnItemSelectedListener{ 

    public MySpinner(){} 

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

    } 

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

    } 
} 

Cela fonctionne vraiment bien pour moi. Vérifiez avec vos id et layout.

+0

Merci, cela a fonctionné. Je ne sais pas pourquoi ça n'a pas été le cas quand j'ai essayé la dernière fois, mais c'est le cas maintenant. Peut-être que j'avais un mauvais type quelque part. – sisisisi