153 votes

Pas besoin de convertir le résultat de findViewById?

Récemment, j'ai découvert qu'AndroidStudio me rappelle de supprimer certains acteurs de la classe. Je me souviens que jadis, nous devions convertir le résultat de findViewById, mais ce n’est plus nécessaire.

Le résultat de findViewById est toujours View, je veux donc savoir pourquoi nous n'avons pas besoin de lancer la classe?

Je ne trouve aucun document mentionné, quelqu'un peut-il trouver un document?

238voto

Eduard B. Points 4628

À partir de l'API 26, findViewById utilise l'inférence pour son type de retour, de sorte que vous n'avez plus à lancer de conversion.

Ancienne définition:

 View findViewById(int id)
 

Nouvelle définition:

 <T extends View> T findViewById(int id)
 

Donc, si votre compileSdk est au moins de 26, cela signifie que vous pouvez vous en servir :)

13voto

zeroDivider Points 190

Selon cet article :

La fonction suivante s'appuie sur l'inférence de type automatique des génériques de Java afin d'éliminer le besoin de transtypage manuel:

 protected <T extends View> T findViewById(@IdRes int id) {
    return (T) getRootView().findViewById(id);
}
 

13voto

Midhun Points 147

Dans les anciennes versions:

 AutoCompleteTextView name = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
 

Depuis Android Studio 3.0 avec le SDK 26:

 AutoCompleteTextView name = findViewById(R.id.autoCompleteTextView);
 

2voto

Tim Points 126

Android Studio rappelle de supprimer la diffusion si vous utilisez des attributs communs de la classe View , tels que la visibilité ou des méthodes courantes, telles que onClick ().

Par exemple:

 ((ImageView) findViewById(R.id.image_car)).setVisibility(View.VISIBLE);
 

Dans ce cas, vous pouvez simplement écrire:

 findViewById(R.id.image_car).setVisibility(View.VISIBLE);
 

2voto

daliaessam Points 685

Android 0, nettoyer casting

L'une des choses que google annoncer IO 2017 est quelque chose qui est appelé "cast away":). Développeur Android n'avez pas à faire un manuel de casting pour findViewById(). Par exemple, à l'ancienne manière à obtenir un texte à afficher à l'aide de findViewById() serait quelque chose comme cela.

TextView txtDesc = (TextView) findViewById(R.id.textViewDesc);
txtDesc.setText(getString(R.string.info_angkot_description));

Alors que le nouveau mode serait comme ça

TextView txtDesc = findViewById(R.id.textViewDesc);
txtDesc.setText(getString(R.string.info_angkot_description));

C'est un simple changement. Mais pour un programmeur expérimenté, un code propre, comme cela peut vous rendre très heureux, et il aide avec votre code d'humeur :)

Pour pouvoir faire cela, vous avez seulement besoin de définir votre projet compilé version du sdk de la version 26 dans votre application construire.gradle.

Vous pouvez toujours cible précédente version du sdk, donc c'est un non-intrusive des changements.

Maintenant, le vrai problème, comment nettoyer ce vieux code qui utilise casting tout ce temps. Surtout quand vous avez, comme des centaines d'activité des fichiers. Vous pouvez le faire manuellement, ou peut-être a recruté un stagiaire pour le faire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X