web-dev-qa-db-fra.com

Que signifie AdapterView <?> Dans la méthode OnitemClick ()? Quelle est l'utilisation d'autres paramètres en elle?

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
29
Nandagopal T

Le <?> indique un générique. En savoir plus sur eux ici

Voici ce que la documentation dit à propos des paramètres:

onItemClick(AdapterView<?> parent, View view, int position, long id)

parent AdapterView où le clic s'est produit.

view La vue sur laquelle l'Adaptateur a cliqué (ce sera une vue fournie par l'adaptateur)

position La position de la vue dans l'adaptateur.

id L'id de la ligne de l'élément sur lequel l'utilisateur a cliqué. 

La AdapterView pourrait être une ListView, GridView, Spinner, etc. Le point d'interrogation à l'intérieur des crochets angulaires indique qu'il peut en être n'importe lequel. Cela s'appelle génériques en Java. Vous pouvez utiliser parent dans le code pour modifier quelque chose dans la vue. Par exemple, si vous utilisiez une ListView, vous pourriez masquer la totalité de ListView par la ligne de code suivante:

parent.setVisibility(View.GONE);

La View fait référence à un élément spécifique dans la AdapterView. Dans une ListView c'est la rangée. Ainsi, vous pouvez obtenir une référence à une TextView dans une ligne en disant quelque chose comme ceci:

TextView myTextView = (TextView) view.findViewById(R.id.textView1);
String text = myTextView.getText().toString();

Position est la position de view dans parent. Pour une ListView, c'est le numéro de la ligne. La rangée supérieure est la position 0, la deuxième rangée est la position 1, la troisième rangée est la position 2, etc. Notez que si votre ListView a une vue en-tête (comme si vous aviez ListView.addHeaderView(View)), la vue en-tête serait la position 0 et la vue réelle. les lignes commenceraient leur numérotation à 1.

Parfois, id est identique à position et parfois, il est différent. Si vous utilisez une variable ArrayAdapter ou SimpleAdapter, elles sont identiques (sauf dans le cas où il existe une vue d'en-tête et qu'elles sont ensuite désactivées d'une unité). Pour une CursorAdapter (et par conséquent une SimpleCursorAdapter), id renvoie l'ID de ligne de la table, c'est-à-dire _id.

Voici quelques autres bonnes réponses à ce sujet:

25
Matty F

Le ? signifie que le type de données est inconnu et qu'il peut s'agir de n'importe quel type.

0
anon