Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Android - Quando usar ou não usar o this?

ArrayAdapter<String> adapter = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, alunos);
Toast.makeText(FormularioActivity.this, "Botao clicado!", Toast.LENGTh_SHORT);

Por que no ArrayAdapter, o this é utilizado? E porque na definição do Toast, é utilizado além do nome da classe, o .this também? (FormularioActivity.this) e não só o this ?

Na explicação foi falado que tinha a ver com referência mas não entendi direito

2 respostas

Juan, tudo bem ?

Sempre vai depender do escopo em que estamos.

Por exemplo no momento em que estamos definindo nosso adapter, definimos no escopo diretamente do onCreate e por esse motivo quando usamos o this, estamos nos referindo diretamente a nossa classe, que é um contexto.

Nos casos onde estamos usando o nome da classe completo, geralmente é quando estamos dentro do escopo de uma classe anônima, que o this é referente a classe anônima, que por sua vez não é um contexto, ai como é necessário passar um contexto, usamos o this de "fora", passando o nome completo da classe.

Abraços

solução!

O FormularioActivity.this é útil quando estamos trabalhando com classes aninhadas, veja abaixo: public class FormularioActivity { class ClasseAninhada { } }

Agora, imagina que as duas classes possuem uma variável com o mesmo nome: public class FormularioActivity { String descricao = "Soa a principal"; class ClasseAninhada { String descricao = "Sou a classe aninhada"; } }

A pergunta que eu faço agora é: Como obter o valor da variável da classe principal a partir da classe aninhada ? se você usar o this direto, vai recuperar a referência da própria classe aninhada. Veja o código que postei. insira seu código aquipublic class ClassePrincipal {

String descricao = "sua a classe principal";

// CLASSE ANINHADA class ClasseAninhada { String descricao = "sou a classe aninhada";

void getDescricao() { System.out.println(this.descricao); // classe aninhada System.out.println(ClassePrincipal.this.descricao); // referencia classe principal }

} }