2012-07-13 1 views
6

Можно создать дубликат:
How do I make a toast from a non activity class?Как отобразить сообщение Тост в от класса, который не распространяется активность

Как я могу создать и показать Toast сообщение из класса, не расширяет класс Activity? Я использую этот класс в другом классе, который расширяется на Activity.

+0

и означают Лик этого Toast.makeText (getApplicationContext(), "Ошибка сервер не отвечает" + e.getMessage(), Toast.LENGTH_SHORT) .показать(); – user1513889

+1

PLS опубликовать код, который нужно знать с легкостью. – AkashG

+0

Для отображения Toast требуется ссылка на объект Context. Вы можете передать объект контекста или объекта деятельности в класс, в котором вы хотите создать Toast. – param

ответ

12

Вам нужен справочник по контексту. Вы можете явный пропуск в качестве параметра при создании класса

public class MyClass { 

    private static Context context; 
    public MyClass(Context c) { 
    context = c; 
    } 

    public static void showToastMethod() { 
     Toast.makeText(context, "mymessage ", Toast.LENGTH_SHORT).show(); 
    } 

} 
+0

мой метод, который используется для отображения тоста в блоке try catch, является статическим – user1513889

+0

см. Edit ... – Blackbelt

+1

Это похоже на отличный способ утечки контекста. Скорее передайте контекст как аргумент 'showToastMethod()' и используйте его оттуда. Удержание постоянной ссылки на нее может быть плохим, если экземпляр вашего класса живет дольше, чем действие/сервис/.. которому принадлежит контекст. Сделать эту статическую ссылку не делает ее лучше, а хуже. –

4

Вы можете передать контекст этой деятельности в классе, передавая значение класса nonActivity

пример:

new NonActivityClass(Activityclass.this) ; 

как и в выше ответ

new MyClass(ActivityClass.this); 

В NonActivityClass

public class NonActivityClass { 

    public NonActivityClass (Context context) { 

     Toast.makeText(context, "mymessage ", Toast.LENGTH_SHORT).show(); 
    } 

} 

Надеется, что это работает для вас ...