Casting to Button es redundante – ¿Por qué?

Acabo de encontrarme con este interesante mensaje del compilador y no sé por qué está sucediendo. Aquí está el caso

Ejemplo 1.

Button test = (Button) findViewById(R.id.someButtonId); test.setOnClickListener(this); 

Ejemplo 2.

 findViewById(R.id.someButtonId).setOnClickListener(this); 

En el primer ejemplo, necesito emitir un objeto devuelto por findViewById a Button . En el segundo ejemplo, no tengo que emitir el objeto devuelto porque no utilicé otro objeto de clase Button . Si intento enviarlo a través de

 ((Button)findViewById(R.id.someButtonId)).setOnClickListener(this); 

Voy a obtener la advertencia Casting findViewById(R.id.someButtonId) to Button is redundant .

¿Por qué está pasando esto? No estoy intentando quitar la advertencia del molde. Quiero saber la lógica detrás de esto y por qué no se necesita casting si no intento inicializar otro objeto con el objeto devuelto por findViewById .

La razón por la que obtienes esto es porque findViewById devuelve View y esta clase ya define el método setOnClickListener . Esto significa que incluso sin hacer el reparto puede establecer el oyente. Por lo tanto, su reparto es redundante.

El findViewById () siempre devuelve View que es el padre de todas las vistas, como ImageView, Button …

SetOnClickListener es un método de la clase View. Así que usted puede capturar los eventos de clic simplemente sin lanzarla a Button. Pienso que solo se dice redundante.

La razón de esto es que en el ejemplo 1 usted necesita explícitamente encontrar un botón porque lo está asignando a una variable Button.

El OnClickListener es para cualquier tipo de Vista, por lo que no es necesario convertirlo a una subclase específica de Vista para establecer un OnClickListener en él.

Supongo que setOnClickListener () es un método en la vista en lugar del botón, y así yep: el reparto es redundante.

Está sucediendo porque no es necesario lanzar View to Button para llamar a setOnClickListener que se define en View . Es suficiente hacer findViewById(R.id.someButtonId).setOnClickListener(this);

  • FindViewById dentro del fragmento
  • ¿Por qué obtener NoSuchFiledException al usar otro proyecto android como biblioteca?
  • Resultado del molde findViewById android method
  • FindViewById dentro de un método estático
  • ¿Cómo puedo asignar un ID a una vista mediante programación?
  • Android: ¿cómo puedo acceder a las vistas (utilizando findViewById) de una actividad de un fragmento onCreateView ()?
  • Huh? FindViewById () no se puede llamar dentro de onReceive ()?
  • Android: un método findViewById () que devuelve valores que no necesitamos emitir
  • La diferencia entre LayoutInflater.inflate y findViewById
  • No se puede resolver el método 'findViewById (int)' en Fragment
  • Cómo encontrar id de diseño en un botón de mapa de bits java fuente que he hecho
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.