Como simular um clique no botão usando o código?


216

Como acionar um evento de clique no botão usando o código no Android? Quero acionar o botão clicar programaticamente quando ocorrer outro evento.

Mesmo problema que estou enfrentando

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 do botão:

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

Mas eu quero chamar essa função OnLoadLayout sem OnClickEvent


você pode especificar o problema? Porque você quer isso? Deseja acionar algum código para ser executado?
Vladimir Ivanov

Sim, quero acionar o código a ser executado para o clique do botão.
sam

Respostas:


445

Há um caminho melhor.

View.performClick();

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

isso deve responder a todos os seus problemas. toda visualização herda essa função, incluindo botão, botão giratório etc.

Apenas para esclarecer, o View não possui um método estático performClick (). Você deve chamar performClick () em uma instância do View. Por exemplo, você não pode simplesmente ligar

View.performClick();

Em vez disso, faça algo como:

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

2
Mas qual é o botão Voltar do View for Android?
precisa

4
não há "Ver" para o botão voltar no seu telefone. você precisa usar os principais ouvintes para pressionar esses botões. essa é uma questão completamente diferente.
moonlightcheese

3
@moon - Se você deseja que as pessoas sejam notificadas dos seus comentários, inicie-as com "@" e as primeiras letras do usuário que você deseja notificar .... (os autores da postagem comentada são automaticamente notificados, mas os comentaristas o fazem não)
Peter Ajtai

14
O código mostrado nesta resposta é um pouco confuso. Apenas para esclarecer, o View não possui um método estático performClick (). Você deve chamar performClick () em uma instância do View.
Wikukasz Wiklendt

3
só é confuso se você não sabe o que está fazendo.
moonlightcheese

52

Apenas para esclarecer o que o moonlightcheese afirmou: Para acionar um evento de clique no botão através do código no Android, forneça o seguinte:

buttonName.performClick();

12

você pode fazer assim

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

7

Às vezes, o Android callOnClick()( adicionado na API 15 ) pode ser uma opção melhor na minha experiência do que performClick(). Se um usuário tiver os sons de seleção ativados, performClick()poderá fazer com que ele ouça dois sons de seleção contínuos que estão um pouco em camadas uns sobre os outros, o que pode ser dissonante. (Um som de seleção para o primeiro clique no botão do usuário e outro para o outro botão OnClickListenerque você está chamando via código.)


7

Basta escrever esta linha de código simples: -

button.performClick();

onde button é a variável de referência da classe Button e definida da seguinte forma: -

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

É isso aí.


6

A partir da API15, você também pode usar callOnClick()essa chamada diretamente da exibição anexada OnClickListener. Diferentemente de performClick (), isso chama apenas o ouvinte e não executa nenhuma ação de clique associada, como relatar um evento de acessibilidade.


4

Se você não usar o senderargumento, por que não refatorar a implementação do manipulador de botões para separar a função e chame-a de onde quiser (do manipulador de botões e do outro local).

De qualquer forma, é um design melhor e mais limpo - um código que precisa ser chamado no manipulador de botões E de outros lugares merece ser refatorado para ter a própria função. Além disso, ajudará você a separar a manipulação da interface do usuário do código lógico do aplicativo. Você também terá um bom nome para a função, não apenas onDateSelectedButtonClick ().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.