Chamando um Toast fora da classe Activity

14 respostas
Rafagan_Abreu

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

lina

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 ?

Rafagan_Abreu

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…

lina

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());
Rafagan_Abreu

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.

lina

Oi,

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

Tchauzin!

Rafagan_Abreu

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?

Rafagan_Abreu

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!

lina

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