Maneira correta de implementar o atributo onClick do Android XML em Activity

5

Eu usei o atributo android: onClick extensivamente em meus layouts XML para o meu aplicativo Android.

Exemplo:

<Button
    android:id="@+id/exampleButton"
    android:onClick="onButtonClick" />

É apropriado criar uma interface para impor a implementação desses métodos onClick em Atividades que usam esse arquivo de layout?

public interface MyButtonInterface {
    public onButtonClick(View v);
}
    
por Austyn Mahoney 14.06.2012 / 23:06
fonte

2 respostas

3

Por que você quer uma interface? É para impor em tempo de compilação que a classe de atividade tem os métodos definidos nos atributos onClick no XML?

Pessoalmente eu não me incomodaria.

  • Quem impõe a interface tem os métodos corretos?
  • Quem impõe a interface certa é usada em cada atividade?

Basta aceitar isso devido à natureza flexível da interação entre as atividades do Android & layouts, não é possível impor em tempo de compilação que a função onClick realmente existe. Tanto quanto eu sei, de qualquer maneira. Alguém me prova errado?

    
por 01.07.2012 / 18:11
fonte
-1
<?xml version="1.0" encoding="utf-8"?> 
<!-- layout elements -->
<Button android:id="@+id/mybutton"
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="Click me!"  
    android:onClick="myFancyMethod" />  
<!-- even more layout elements -->

O código acima mostra apenas a implementação XML. Agora, em segundo plano, o Android não faz nada além do código Java que chama seu método em um evento de clique.

Observe que, com o XML acima, o Android procurará o método onFick myFancyMethod () apenas no arquivo .java da atividade ativa no momento. É importante lembrar se você está usando fragmentos, pois mesmo que você adicione o XML acima usando um fragmento, o Android não procurará o método onClick no arquivo .java do fragmento usado para adicionar o XML.

protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog);
}

public void myFancyMethod(final View view) {
    System.out.println("clicked");
}
    
por 01.07.2012 / 11:33
fonte

Tags