Chamando um Toast fora da classe Activity

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?

Oi,

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

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

[code]ao_activity.runOnUiThread
(
new Runnable()
{
public void run() {

     Toast.makeText(ao_activity, as_message, an_length).show();
  }

}
);[/code]

Tchauzin!

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

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

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…

[quote=Rafagan Abreu]Oi pessoal…

Obrigado pelas respostas

Vamos lá:

1- Lina, como funciona esse runOnUithread?[/quote]

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!

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.

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

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!

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

Oi,

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

Tchauzin!

Lina, é o seguinte…

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

[code]Game.act.runOnUiThread
(
new Runnable()
{
public void run() {

       Toast.makeText(Game.act, "Teste", Toast.LENGTH_SHORT).show();  
     }  
 }

);[/code]

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

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!

Oi,

Simplesmente nada.

Tchauzin!

Coloca resolvido lá em cima :]