¿Cómo simular un clic de botón usando código?


216

¿Cómo puedo activar un evento de clic de botón usando el código en Android? Quiero activar el clic del botón mediante programación cuando se produce algún otro evento.

Mismo problema al que me enfrento

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

Código del botón:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

Pero quiero llamar a esa función OnLoadLayout sin OnClickEvent


¿puedes especificar el problema? ¿Por qué quieres eso? ¿Desea activar algún código para que se ejecute?
Vladimir Ivanov

Sí, quiero activar el código para que se ejecute al hacer clic en el botón.
sam

Respuestas:


445

Hay una mejor manera.

View.performClick();

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

Esto debería responder a todos tus problemas. Cada Vista hereda esta función, incluyendo Botón, Spinner, etc.

Solo para aclarar, View no tiene un método estático performClick (). Debe llamar a performClick () en una instancia de View. Por ejemplo, no puedes simplemente llamar

View.performClick();

En cambio, haga algo como:

View myView = findViewById(R.id.myview);
myView.performClick();

2
Pero, ¿cuál es el botón de retroceso Ver para Android?
Peter Ajtai

44
no hay "Ver" para el botón de retroceso en su teléfono. necesita usar oyentes clave para presionar esos botones. Esa es una cuestión completamente diferente.
moonlightcheese

3
@moon: si desea que las personas sean notificadas de sus comentarios, comience con "@" y las primeras letras del usuario a quien desea notificar ... (los autores de la publicación comentada reciben una notificación automáticamente, pero los comentaristas sí no)
Peter Ajtai

14
El código que se muestra en esta respuesta es un poco confuso. Solo para aclarar, View no tiene un método estático performClick (). Debe llamar a performClick () en una instancia de View.
Łukasz Wiklendt

3
solo es confuso si no sabes lo que estás haciendo.
moonlightcheese

52

Solo para aclarar lo que dijo moonlightcheese: para activar un evento de clic de botón a través del código en Android, proporcione lo siguiente:

buttonName.performClick();

12

puedes hacerlo de esta manera

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();

7

Android callOnClick()( agregado en API 15 ) a veces puede ser una mejor opción en mi experiencia que performClick(). Si un usuario tiene habilitados los sonidos de selección, performClick()podría hacer que el usuario escuche dos sonidos de selección continua que están en capas uno encima del otro, lo que puede ser discordante. (Un sonido de selección para el primer clic del usuario en el botón y luego otro para el otro botón al OnClickListenerque está llamando mediante código).


7

Simplemente escriba esta simple línea de código: -

button.performClick();

donde button es la variable de referencia de la clase Button y se define de la siguiente manera:

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

Eso es.


6

A partir de API15, puede usar también callOnClick()esa llamada directamente a la vista adjunta OnClickListener. A diferencia de performClick (), esto solo llama al oyente y no realiza ninguna acción de clic asociada, como informar un evento de accesibilidad.


4

Si no utiliza el senderargumento, ¿por qué no refactorizar la implementación del controlador de botones para separar la función y llamarla desde donde desee (desde el controlador de botones y desde el otro lugar).

De todos modos, es un diseño mejor y más limpio: un código que debe invocarse en el controlador de botones Y desde otros lugares merece ser refactorizado para tener su propia función. Además, lo ayudará a separar el manejo de la interfaz de usuario del código lógico de la aplicación. También tendrá un buen nombre para la función, no solo onDateSelectedButtonClick ().

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.