SetOnclickListener vs OnClickListener vs View.OnClickListener
Mi comprensión es cuando estoy creando un objeto de botón que escucha un clic que tengo que:
- Crear el objeto de botón
- Utilice OnClickListner para hacer que escuche el clic del usuario
- Use onClick para ejecutar acciones después de que el usuario haga clic en el botón
ahora
- GetOnClickListener () en las vistas de Android
- Múltiples botones `OnClickListener ()` android
- OnClickListener Mantener pulsado el botón?
- Android - OnClick Listener en una clase aparte
- Haga doble clic en OnClickListener de un adaptador de vista de reciclador
- ¿
setOnClickListener
encaja en la lógica anterior? - ¿Cuál escucha realmente el tecleo del botón?
- SetOnclickListener?
- ONclickListener?
- ¿View.OnClickListener?
- ¿Cuáles son las diferencias entre esos 3?
Esto es lo que encontré en Android Dev:
The example below shows how to register an on-click listener for a Button. // Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { // do something when the button is clicked } }; protected void onCreate(Bundle savedValues) { ... // Capture our button from layout Button button = (Button)findViewById(R.id.corky); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); ... }
También puede resultar más conveniente implementar OnClickListener como parte de su actividad. Esto evitará la asignación de objetos y asignación de clase extra. Por ejemplo:
public class ExampleActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedValues) { ... Button button = (Button)findViewById(R.id.corky); button.setOnClickListener(this); } // Implement the OnClickListener callback public void onClick(View v) { // do something when the button is clicked } }
- Múltiples botones `OnClickListener ()` android
- Android - mismo OnClickListener para TextView y ImageView
- Cómo pasar los parámetros a OnClickListener?
- ¿Cómo se utiliza un OnClickListener en una vista de reciclador?
- Configuración de un onClickListener en un texto de CheckBox
- onClickListener a un botón del teclado
- Java Android - setOnClickListener (View.OnClickListener) en el tipo View no es aplicable para los argumentos (nuevo OnClickListener () {})
- Declarando que una clase implementa OnClickListener vs. declarándolo usted mismo?
La lógica es simple. setOnClickListener
pertenece al paso 2.
- Usted crea el botón
- Crea una instancia de
OnClickListener
* como se hace en ese ejemplo y anula el métodoonClick
. -
OnClickListener
a ese botón usandobtn.setOnClickListener(myOnClickListener);
En sus fragmentos / actividadesonCreate
. - Cuando el usuario hace clic en el botón, se llama a la función
onClick
delOnClickListener
asignado.
* Si import android.view.View;
Utiliza View.OnClickListener
. Si import android.view.View.*;
O import android.view.View.OnClickListener;
Usted utiliza OnClickListener
en la medida en que lo recibo.
Otra forma es dejar que la actividad / fragmento hereda de OnClickListener
. De esta manera, asigna tu fragmento / actividad como el oyente para tu botón e implementa onClick
como una función-miembro.
Imagine que tenemos 3 botones por ejemplo
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Capture our button from layout Button button = (Button)findViewById(R.id.corky); Button button2 = (Button)findViewById(R.id.corky2); Button button3 = (Button)findViewById(R.id.corky3); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); button2.setOnClickListener(mCorkyListener); button3.setOnClickListener(mCorkyListener); } // Create an anonymous implementation of OnClickListener private View.OnClickListener mCorkyListener = new View.OnClickListener() { public void onClick(View v) { // do something when the button is clicked // Yes we will handle click here but which button clicked??? We don't know } }; }
¿Entonces que haremos?
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Capture our button from layout Button button = (Button)findViewById(R.id.corky); Button button2 = (Button)findViewById(R.id.corky2); Button button3 = (Button)findViewById(R.id.corky3); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); button2.setOnClickListener(mCorkyListener); button3.setOnClickListener(mCorkyListener); } // Create an anonymous implementation of OnClickListener private View.OnClickListener mCorkyListener = new View.OnClickListener() { public void onClick(View v) { // do something when the button is clicked // Yes we will handle click here but which button clicked??? We don't know // So we will make switch (v.getId() /*to get clicked view id**/) { case R.id.corky: // do something when the corky is clicked break; case R.id.corky2: // do something when the corky2 is clicked break; case R.id.corky3: // do something when the corky3 is clicked break; default: break; } } }; }
O podemos hacer esto:
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Capture our button from layout Button button = (Button)findViewById(R.id.corky); Button button2 = (Button)findViewById(R.id.corky2); Button button3 = (Button)findViewById(R.id.corky3); // Register the onClick listener with the implementation above button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // do something when the corky is clicked } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // do something when the corky2 is clicked } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // do something when the corky3 is clicked } }); } }
O podemos implementar View.OnClickListener y creo que es la mejor manera:
public class MainActivity extends ActionBarActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Capture our button from layout Button button = (Button)findViewById(R.id.corky); Button button2 = (Button)findViewById(R.id.corky2); Button button3 = (Button)findViewById(R.id.corky3); // Register the onClick listener with the implementation above button.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); } @Override public void onClick(View v) { // do something when the button is clicked // Yes we will handle click here but which button clicked??? We don't know // So we will make switch (v.getId() /*to get clicked view id**/) { case R.id.corky: // do something when the corky is clicked break; case R.id.corky2: // do something when the corky2 is clicked break; case R.id.corky3: // do something when the corky3 is clicked break; default: break; } } }
Por último, no hay diferencias reales aquí Sólo "mucho mejor que el otro"
Tenga en cuenta que, por motivos de simplicidad, he hecho referencia sólo al primer fragmento de código, es decir,
// Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { // do something when the button is clicked } }; protected void onCreate(Bundle savedValues) { ... // Capture our button from layout Button button = (Button)findViewById(R.id.corky); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); ... }
setOnClickListener(View.OnClickListener l)
es un método público de la clase View. La clase Button extiende la clase View y, por lo tanto, puede llamar al setOnClickListener(View.OnClickListener l)
.
SetOnClickListener registra una devolución de llamada a invocarse cuando se hace clic en la vista (botón en su caso). Esta respuesta debe responder a las dos primeras preguntas:
1. ¿Dónde se ajusta setOnClickListener
en la lógica anterior?
Resp. Registra una devolución de llamada cuando se hace clic en el botón. (Explicado en detalle en el siguiente párrafo).
2. ¿Cuál escucha realmente el clic del botón?
Resp. setOnClickListener
método setOnClickListener
es el que realmente escucha el clic del botón.
Cuando digo que registra una devolución de llamada a invocarse, lo que quiero decir es que ejecutará el View.OnClickListener l
que es el parámetro de entrada para el método. En su caso, será mCorkyListener
mencionado en button.setOnClickListener(mCorkyListener);
Que luego ejecutará el método onClick(View v)
mencionado en
// Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { // do something when the button is clicked } };
Más adelante, OnClickListener
es una definición de Interfaz para una llamada a invocarse cuando se hace clic en una vista (botón en su caso). Simplemente diciendo, al hacer clic en ese botón, los métodos dentro de mCorkyListener
(porque es una implementación de OnClickListener
) se ejecutan. Pero, OnClickListener
tiene sólo un método que es OnClick(View v)
. Por lo tanto, cualquier acción que deba realizarse al hacer clic en el botón debe codificarse dentro de este método.
Ahora que sabes lo que significa setOnClickListener
y OnClickListener
, estoy seguro de que podrás diferenciar entre los dos tú mismo. El tercer término View.OnClickListener
es en realidad OnClickListener
. La única razón por la que tienes View.
Precedente es debido a la diferencia en la declaración de import
en el inicio del programa. Si sólo tiene import android.view.View;
Como la instrucción de importación que tendrá que utilizar View.OnClickListener
. Si menciona cualquiera de estas instrucciones de import android.view.View.*;
: import android.view.View.*;
O import android.view.View.OnClickListener;
Puede omitir la View.
Y simplemente usar OnClickListener
.
-
En primer lugar, no hay diferencia entre
View.OnClickListener
yOnClickListener
. Si sólo utilizaView.OnClickListener
directamente, entonces no necesita escribir-Import android.view.View.OnClickListener
-
Establece una instancia OnClickListener (por ejemplo,
myListener
denominado objeto) como escucha a una vista a través desetOnclickListener()
. Cuando se dispara un evento declick
,myListener
recibe una notificación y se llama al métodoonClick(View view)
. Ahí es donde hacemos nuestra propia tarea. Espero que esto te ayude.
View es la superclase para todos los widgets y la interfaz OnClickListener pertenece a esta clase. Todos los widgets heredan esto. View.OnClickListener es el mismo que OnClickListener. Tendrías que anular el método onClick (View view) desde este listener para lograr la acción que deseas para tu botón.
Para indicarle a Android que escuche los eventos de clic de un widget, debe hacer lo siguiente:
widget.setOnClickListener(this); // If the containing class implements the interface // Or you can do the following to set it for each widget individually widget.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Do something here } });
El parámetro 'Ver' pasado en el método onClick () simplemente permite a Android saber que se ha hecho clic en una vista. Puede ser un botón o un TextView o algo más. Depende de usted establecer un OnClickListener para cada widget o simplemente hacer que la clase que contiene todos estos widgets implemente la interfaz. En este caso, tendrás un método común onClick () para todos los widgets y todo lo que tienes que hacer es comprobar el id de la vista que se pasa al método y luego coincidir con el id de cada elemento que quieras y Tomar medidas para ese elemento.
- ¿Cómo quitar la descripción del gráfico en MPAndroidChart?
- Cómo mejorar el tiempo de carga de la vista web