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.
- FindViewById devuelve null - Android - setContentView
- Intenta invocar el método virtual 'android.view.Window $ Callback android.view.Window.getCallback ()' en una referencia de objeto nulo
- Usando findviewbyid en una clase que NO extiende Actividad en android
- El método findViewById (int) no está definido para el tipo Get Data Fragment for Accelerometer Sensor
- Cómo hacer un findViewById (R.id. >> StringVarHere <<)?
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
.
- Android: ¿Cómo usar mediaController en la clase de servicio?
- Android findViewById () en la vista personalizada
- FindViewById en una vista personalizada para encontrar la vista secundaria
- getActivity (). findViewById (R.layout.contacts_list_view) devuelve null
- FindViewById donde ID es cadena dinámica
- No se puede resolver el método 'findViewById (int)'
- Cómo inflar correctamente un diseño con un ViewFlipper anidado?
- Eficiencia de 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);