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

sam
fonte
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();
moonlightcheese
fonte
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();
Scott Tovey
fonte
12

você pode fazer assim

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
Tushar Saha
fonte
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.)

Charles Madere
fonte
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í.

Deepak Sharma
fonte
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.

Colateral
fonte
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 ().

d.popov
fonte