1
resposta

O que significam cada elemento dessas instruções: botaoSalvar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }

O que significam cada elemento dessas instruções:

 botaoSalvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
 }
1 resposta

Enumerando as linhas, temos esse esquema:

(1) botaoSalvar.setOnClickListener(
(2)    new View.OnClickListener() {
(3)             @Override
(4)             public void onClick(View v) {

                   }
(5)     });

(1): chamamos o método setOnClickListener na variável de nome botaoSalvar. Veja que no fim da linha (1) abrimos parênteses, então todo o resto dessas linhas de código é o argumento do método setOnClickListener.

(2): Ao chamar new criamos um novo objeto. Esse objeto, entretanto, é uma interface (e não uma classe, como de costume). Essa interface é chamada OnClickListener e está definida dentro da classe View. Por isso chamamos View.OnClickListener.

Como é possível dar new numa interface se a interface não define o corpo dos métodos? Lembra: a interface só tem a assinatura dos métodos, e não seu corpo.

É só definir o corpo dos métodos da interface na hora do new. Isso nos leva ao próximo passo...

(4): Esse é o método onClick, que está definido na interface que chamamos o new na linha (2). Veja que abrimos chaves no final dessa linha (4) para podermos escrever o corpo desse método (ou até mesmo deixar vazio, como nesse exemplo).

(3): Esse @Override é o que chamamos de annotation, para indicar ao compilador que a assinatura do método onClick existe com certeza na interface OnClickListener. Caso, por um descuido, alteremos a assinatura do onClick para onClique, teremos um erro de compilação, pois o onClique não está definido na interface.

(5): Como abrimos parêntesis lá na linha (1) e abrimos chaves lá na linha (2), aqui fechamos tudo. E colocamos o ponto-e-virgula, para iniciar o término da chamada do método inicial: o setOnClickListener.