Resultado del molde findViewById android method

¿Por qué siempre tenemos que arrojar el valor devuelto por el método findViewById(id) ? El método ya devuelve una vista, como he visto en la referencia de google:

http://developer.android.com/reference/android/view/View.html#findViewById(int)

Entonces, ¿es posible arrojar a otra cosa aparte de una vista? Por ejemplo, haga esto:

 ImageView image = (ImageView) findViewById(R.id.image) ? 

El método findViewById() devuelve una instancia de la clase que realmente se utiliza para definir esa vista en su archivo XML. La firma del método devuelve una View para hacerla genérica y utilizable para todas las clases que heredan para la View .

Necesitas emitir el valor devuelto a la clase que tu variable se define cuando la usas como:

 ImageView image = (ImageView) findViewById(R.id.image); 

Java no emitirá eso implícitamente para usted.

Usted podría dejarlo como:

 View image = findViewById(R.id.image); 

pero no podrá utilizar los métodos, etc. definidos en la clase ImageView .

Yo siempre defino un método que hace el casting para mí en mi actividad base:

 @SuppressWarnings("unchecked") public <T extends View> T $(int id) { return (T) findViewById(id); } 

Esto significa que en lugar de:

 Button btn = (Button)findViewById(R.id.btn); 

Tu puedes hacer:

 Button btn = $(R.id.btn); 

View es la superclase común de otras clases de vista, como ImageView . En el polimorfismo orientado a objetos, puede sustituir una instancia específica, por ejemplo, ImageView con la superclase. Esto es útil en APIs genéricas como findViewById() valor devuelto.

Downcasting a un tipo más específico en Java requiere un elenco explícito.

Lo emitimos a una vista en particular como ImageView o TextView cuando necesitamos usar ciertas propiedades pertenecientes a ese tipo de vistas. Por ejemplo, usted usará

 ImageView image = (ImageView) findViewById(R.id.image); 

y luego utilizar la image para establecer algunas propiedades de un ImageView explícitamente. Por ejemplo,

 image.setImageBitmap(); image.setImageAlpha(); 

y similares. Cuando no es necesario utilizar ninguna propiedad específica para la vista, entonces no hay necesidad de casting. Por ejemplo, en Android cualquier vista se puede establecer visible, desaparecido o invisible. En ese caso no hay necesidad de fundición de tipo. Incluso lo siguiente funcionará.

 View image = findViewById(R.id.image); image.setVisibility(View.VISIBLE); 

Sí, findViewById() devuelve View . Puede omitir la conversión si no necesita utilizar los métodos de las subclases directas / indirectas, que amplían la View , como ImageView , LinearLayout , TextView , etc.

View es la clase base de widgets, que se utilizan para crear componentes interactivos de interfaz de usuario (botones, campos de texto, etc.)

Y por supuesto puedes bajar a cualquier subclase de View

  • Casting to Button es redundante - ¿Por qué?
  • Excepción de conversión de clase a la misma clase en Android
  • FindViewById devuelve el elemento erróneo?
  • Android: un método findViewById () que devuelve valores que no necesitamos emitir
  • Cómo encontrar id de diseño en un botón de mapa de bits java fuente que he hecho
  • No es necesario emitir el resultado de findViewById?
  • Eficiencia de findViewById
  • Puntero nulo Excepción - findViewById ()
  • No se puede resolver el método 'findViewById (int)'
  • FindViewById devuelve null - Android - setContentView
  • Huh? FindViewById () no se puede llamar dentro de onReceive ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.