Chamando um Toast fora da classe Activity

14 respostas
R

Olá a todos…

Estou com um problema… Preciso chamar um toast de fora da classe que herda a Activity, mas não estou conseguindo e não entendo o que esta acontecendo. Para tal:

1- Inicio o contexto da Activity em onCreate
2- Crio uma surface view e a seto como contentView
3- Crio um método getContexto(), o qual retorna this
4- Chamo o toast, passando no primeiro parâmetro getContexto()…

já fiz vários testes e o toast só é exibido sem dar break na aplicação se eu chamar o makeText de dentro da classe filha de Activity.

Já tentei declarar um Context como static na outra classe e definí-lo a partir de onCreate, enfim… Tudo me faz trazer a questão se é possível chamar um Toast de fora da classe principal da aplicação…

Alguém ja conseguiu implementar um toast de fora da classe?

14 Respostas

L

Oi,

Infelizmente ou felizmente, você precisará usar o runOnUiThread da sua Activity.

Ou seja, precisará ter a referencia dela em algum lugar.

ao_activity.runOnUiThread
(
   new Runnable()
   {
      public void run() {
         
         Toast.makeText(ao_activity, as_message, an_length).show();
      }
   }
);

Tchauzin!

V

Tem um jeito sim, você passando uma activity como parâmetro em um metodo.

public static void gerarToast(Activity tela, CharSequence message) {
        int duration = Toast.LENGTH_LONG;
        Toast toast  = Toast.makeText(tela.getApplicationContext(), message, duration);
        toast.show();
    }
V

Você tá chamando o toast com uma Thread rodando ?

R

Oi pessoal…

Obrigado pelas respostas

Vamos lá:

1- Lina, como funciona esse runOnUithread?

2- Valério, seu código é o que eu já ando fazendo, e sim, estou chamando toast numa thread separada para o desenho, que não é a mesma da Activity. Aliás, pode ser esse o grande equívoco. Como eu poderia capturar o valor do Contexto da Activity principal e usar na thread? receber como parâmentro já vimos que não conta…

L

Rafagan Abreu:
Oi pessoal…

Obrigado pelas respostas

Vamos lá:

1- Lina, como funciona esse runOnUithread?

Oi,

Apesar de postar aqui, eu nunca usei essa opção. Pelo que li na documentação (API) o use de runOnUiThread forçará um update direto na Thread-Ui de sua Activity.

Logo, pode ser que funcione.

Tchauzin!

V

Então, o problema está aí, quando está em uma Thread você tem que chamar o método através de um handler, aconteceu o mesmo comigo.

V

você pode fazer isso:

Handler handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				Util.gerarToast(Activity.this, "Seu texto);
			}
		};

aí chama assim:

handler.sendMessage(new Message());
R

Entendi Valeio…

Estarei testando sua solução em breve e postando aqui o resultado…
Estou iniciando no mundo das Threads agora, e é bom saber desses problemas pra evitar no futuro.

Obrigado mesmo pessoal!

V

eu também cara, tive muita dificuldade com isso hehehe.

L

Oi,

Tipo, testei aqui e minha solução dá certo…

Tchauzin!

R

Lina, é o seguinte...

Estou na thread e quero chamar o método da activity:

Game.act.runOnUiThread
(
	new Runnable()  
       {  
        public void run() {  
             
           Toast.makeText(Game.act, "Teste", Toast.LENGTH_SHORT).show();  
         }  
     }
);

Considere que Game.act é a activity declarada estaticamente, o que chamo no lugar de new Runnable?

R

Pronto! Consegui também!

Cara, ambas as alternativas que os dois me passaram funcionam bem!

Vocês são demais moçada. Brigadão mesmo!

L

Oi,

Simplesmente nada.

Tchauzin!

V

Coloca resolvido lá em cima :]

Criado 22 de outubro de 2012
Ultima resposta 23 de out. de 2012
Respostas 14
Participantes 3