Передача контекста стандартному классу Java с использованием getApplicationContext вызывает принудительное закрытие

Я работаю над приложением для Android, и в настоящее время у меня проблема с передачей контекстов стандартному классу Java из ListFragment.

У меня есть класс с именем Common, и в конструкторе я передаю контекст, поэтому я могу выполнять различные общие задачи, такие как отображение диалогового окна предупреждения, чтобы я мог продолжать повторно использовать код вместо того, чтобы писать код каждый раз для каждого предупреждения. диалоговое окно, которое мне нужно. Чтобы инициализировать класс в стандартном действии, которое я использую.

Common common = new Common(this);

Приведенный выше код отлично работает, если это делается в классе, который расширяет Activity. Однако, если я хочу сделать то же самое, но в классе, который расширяет ListFragment, это не сработает, поэтому я использую следующий код для инициализации класса

Common common = new Common(getActivity().getApplicationContext());

Когда приведенный выше код выполняется в ListFragment, когда функция используется для отображения диалогового окна предупреждения «Да/Нет», я получаю принудительное закрытие с исключением

FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window
--token null is not for an application

Ниже приведен код конструктора класса

public Common(Context context)
{
    this.context = context;
}

Еще раз повторюсь: все функции класса Common, включая диалоговое окно «Да/Нет», работают без проблем, если класс Common инициализируется из класса, расширяющего Activity с помощью this аргумент передается конструктору. Только если я getActivity().getApplicationContext() в качестве аргумента, переданного конструктору, я получаю эту ошибку.

В качестве теста я также изменил один из своих классов, который расширяет действие, и использовал getApplicationContext вместо этого, и я получаю ту же ошибку, поэтому это не обязательно связано со мной, используя ListFragment.

Спасибо за любую помощь, которую вы можете предоставить.


person Boardy    schedule 25.09.2012    source источник


Ответы (1)


Вы не можете использовать ApplicationContext в вашем случае. Вместо этого используйте только getActivity(). Activity - это Context, поэтому ваш конструктор класса Common будет удовлетворен.

Но вместо этого ваш класс Common должен иметь конструктор Common(Activity a).

person Alexander Kulyakhtin    schedule 25.09.2012
comment
Вы правы наполовину, мне нужно использовать getActivity() отдельно, а не использовать getActivity().getApplicationContext(), но мне не нужно было менять конструктор для общего класса на Activity, я сохранил это как Context и работает нормально, спасибо за помощь - person Boardy; 26.09.2012
comment
@Boardy Вам не нужно было менять конструктор, верно. Но если бы ваш конструктор принимал действия, а не контексты, у вас не было бы рассматриваемой проблемы. - person Alexander Kulyakhtin; 26.09.2012