Действие наследует контекст. AlertDialog.Builder указывает аргумент Context, потому что затем он может использоваться ЛЮБЫМ классом, который является подклассом Context, включая Activity, ListActivity, Service,... (за этим стоит общая идиома кодирования — вы можете узнать больше об этом прочитав пункт I8 (об интерфейсах и абстрактных классах) в фантастической книге Джошуа Блоха «Эффективная Java»).
getApplicationContext() возвращает контекст для вашего приложения, который в основном совпадает с контекстом ваших действий, и «в основном» это то, что вас сбивает. Детали неясны, но это широко распространенная проблема, и типичным ответом является использование контекста, который будет выводить предупреждение на экран. Обратите внимание, что это не тот, который возвращает getApplicationContext().
Теперь, если вы похожи на меня, вы можете сказать: «Но я работаю в классе, который не наследуется от Activity — вот почему я хочу использовать для этого getApplicationContext() в первую очередь — ну да!» Я на самом деле не говорю так грубо ;p .. Дело в том, что я тоже был здесь. Я исправил это следующим образом: 1) спросите себя: «Есть ли у меня мой код UI AlertDialog в классе без активности, потому что я хочу поделиться им между действиями… или даже между ListActivities, Services,…?». Если нет, хммм... у вас действительно есть вызовы пользовательского интерфейса AlertDialog в коде, который, как вы не можете гарантировать, будет иметь доступ к пользовательскому интерфейсу (и, следовательно, к контексту)? Если это так, пересмотрите свой дизайн.
Предполагая, что вы хотите поделиться этим классом между действиями,... ответ становится ясным. Вы хотите, чтобы ваш класс мог использоваться различными вызывающими объектами, каждый из которых, вероятно, имеет свой собственный контекст: поэтому вызывающий объект должен передать свой контекст в ваш класс в качестве аргумента:
myClass(Context theContext, ...) { ... }
Каждое действие, услуга и т. д. затем вызывает такие вызовы:
myClass(this, ...);
Выглядит знакомо?
Будьте осторожны! что, если вы используете общий код, вы должны учитывать возможность параллельного поступления различных вызовов в ваш общий код со всеми многочисленными последствиями. Это вне нашей компетенции здесь ...
Развлекайся :)
person
DJC
schedule
29.03.2011
Context
, кромеActivity
. mail-archive.com/[email protected]/ - person bigstones   schedule 29.03.2011