Eu tenho a atividade:
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler);
b2.setOnClickListener(myhandler);
...
}
View.OnClickListener myhandler = new View.OnClickListener() {
public void onClick(View v) {
// MY QUESTION STARTS HERE!!!
// IF b1 do this
// IF b2 do this
// MY QUESTION ENDS HERE!!!
}
}
}
Como verifico qual botão foi clicado?
Respostas:
Você aprenderá a maneira de fazê-lo, de uma maneira fácil, é:
Ou, se você estiver trabalhando com apenas um listener de cliques, poderá:
No entanto, eu não recomendo fazê-lo dessa maneira, pois você precisará adicionar um
if
para cada botão que usar. Isso é difícil de manter.fonte
View
não é umButton
, masButton
é umView
. No entanto, você pode converter umView
para umButton
. Lembre-se de que a segunda maneira de fazer isso não é recomendada ... talvez o v não seja um botão, o que gerará uma exceção de conversão.Ou você pode tentar o mesmo, mas sem ouvintes. Na sua definição XML de botão:
E no seu código, defina o método
ButtonOnClick
:fonte
if
declarações e ouvintes. Os ouvintes são ótimos se os botões são criados em tempo de execução, mas esse geralmente não é o caso.Fragment
s, pois o retorno de chamada deve residir na atividade (não no fragmento).Eu prefiro:
E depois:
Switch
-case
é mais fácil de manter do queif
-else
, e essa implementação não requer muitas variáveis de classe.fonte
Cinco maneiras de conectar um ouvinte de evento é um ótimo artigo que mostra as várias maneiras de configurar um único ouvinte de evento. Deixe-me expandir isso aqui para vários ouvintes.
1. Classe Membro
2. Tipo de interface
3. Classe interna anônima
4. Implementação na atividade
5. Atributo no layout da vista para eventos OnClick
E em xml:
fonte
Se você não deseja salvar instâncias do botão 2 no código da classe, siga esta MELHOR maneira (isso é mais claro e rápido !!):
fonte
Outra maneira de fazer isso é um único ouvinte da atividade, assim:
Eu gosto de fazê-lo com IF único em vez de alternar com outra opção, mas se você preferir, deve fazer:
fonte
A melhor maneira é
switch
alternar entre v.getId (). Ter OnClickListener anônimo separado para cada botão está ocupando mais memória. A transmissão de exibição para o botão é desnecessária. Usar if-else quando a opção é possível é mais lento e difícil de ler. Na fonte do Android, você pode observar a comparação das referências por if-else:Não sei exatamente por que eles escolheram esse caminho, mas também funciona.
fonte
use setTag ();
como isso:
fonte
Além da resposta de Cristian C (desculpe, eu não tenho a capacidade de fazer comentários), se você criar um manipulador para os dois botões, poderá comparar diretamente v com b1 e b2 ou se quiser comparar com o ID, não precisa converter v para Button (a View também possui o método getId ()) e, dessa forma, não há preocupação com a exceção de conversão.
fonte
fonte
Confira este artigo para mais detalhes
fonte