android casting findviewbyid

android - ¿No es necesario emitir el resultado de findViewById?



casting (5)

A partir de API 26, findViewById usa inferencia para su tipo de retorno, por lo que ya no tiene que emitir.

Antigua definición:

View findViewById(int id)

Nueva definición:

<T extends View> T findViewById(int id)

Entonces, si su compileSdk es al menos 26, significa que puede hacer uso de esto :)

Recientemente descubrí que AndroidStudio me recuerda que elimine parte del reparto de clases. Recuerdo que en el pasado, teníamos que emitir el resultado de findViewById, pero ahora no es necesario.

El resultado de findViewById sigue siendo View, así que quiero saber por qué no necesitamos emitir la clase.

No puedo encontrar ningún documento mencionado, ¿alguien puede encontrar algún documento?


Android 0, limpieza de casting

Una de las cosas que Google anuncia en IO 2017 es algo que se llama ''desechar'' :). El desarrollador de Android no tiene que hacer una conversión manual para findViewById (). Por ejemplo, la forma anterior de obtener una vista de texto usando findViewById () sería algo como esto.

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

Mientras que la nueva forma sería así

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

Es un cambio simple. Pero para un programador experimentado, un código limpio como este puede hacerte muy feliz y te ayuda con tu estado de ánimo de codificación :)

Para poder hacer esto, solo necesitaba configurar la versión sdk compilada de su proyecto a la versión 26 en su aplicación build.gradle.

Todavía puede apuntar a una versión sdk anterior también, por lo que es un cambio no intrusivo.

Ahora, el verdadero problema, ¿cómo se limpia ese código antiguo que usa la conversión todo este tiempo? Especialmente cuando tienes como cientos de archivos de actividad. Puedes hacerlo manualmente, o tal vez contratar a un interno para hacerlo 😛. Pero afortunadamente para todos los pasantes, el estudio de Android ya está preparado para ayudarnos con esto.

Cuando pongas tu caret (o hagas clic en el casting redundante), Android Studio te sugerirá 2 opciones para manejar el casting redundante.

Primero, sugerirá eliminar esa conversión redundante o puede seleccionar el código de limpieza. Eliminará toda la conversión redundante para ese archivo. Esto es mejor, pero queremos más. No queremos abrir cada archivo y hacer esta limpieza uno por uno.

Una de las cosas que hacen que la idea de IntelliJ sea especial es que es una característica que se llama acción intencional. Todo lo que tienes que hacer es presionar ctrl + shift + A y luego escribir clean. Y seleccione la acción Limpiar código y seleccione todo el alcance del proyecto. Con estos simples pasos, su código será mucho más limpio.

Un punto importante es que haga esto con algún sistema de versiones de código. De esta manera, puede comparar los cambios realizados por la acción intencional y revertir los archivos que desee.

Copiado de la publicación original:

https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef


Android Studio recuerda eliminar la transmisión, si usa atributos comunes de la clase View , como visibilidad o algunos métodos comunes, como onClick ()

Por ejemplo:

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

En este caso, simplemente puede escribir:

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


De acuerdo con este article :

La siguiente función se basa en la inferencia automática de tipos genéricos de Java para eliminar la necesidad de conversión manual:

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


En versiones anteriores:

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

Desde Android Studio 3.0 con SDK 26:

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