Нужен контекст в классе без активности

#android

#Android

Вопрос:

Возникает много вопросов о том, как открыть всплывающее окно из другого класса, я, должно быть, перепробовал их все, и ни один из них, похоже, не работает.

Я расширяю WebViewClient и мне нужно всплывать некоторые сообщения, связанные с ошибками загрузки и т. Д., С помощью toast, Однако, похоже, я не могу определить контекст?

 public class MyAppWebViewClient extends WebViewClient {

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

    public static void popup(String message){
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    popup("Hello World")
}
 

И это ошибка:

 Error:(301, 34) error: constructor MyAppWebViewClient in class MyAppWebViewClient cannot be applied to given types;
required: Context
found: no arguments
reason: actual and formal argument lists differ in length
 

Что я делаю не так??

Комментарии:

1. Какая строка кода вызывает ошибку?

2. @Blackbelt — спасибо за помощь, я сделал, как вы предложили, и добавил super(); в качестве первой строки, но ошибка идентична.

Ответ №1:

Во-первых, context переменной не должно быть static . Ваш код, вероятно, будет работать с static модификатором. Однако он используется неправильно.

Далее MyAppWebViewClient конструктору требуется Context параметр, поэтому вы должны предоставить его при создании MyAppWebViewClient экземпляров. Например:

 WebViewClient client = new MyAppWebViewClient(this);
 

Я предполагаю, что эта строка кода находится внутри метода подкласса Activity . Если вместо этого вы находитесь в Fragment подклассе, сделайте это:

 WebViewClient client = new MyAppWebViewClient(getActivity());
 

Комментарии:

1. Большое вам спасибо, вы, вероятно, можете сказать, что я не эксперт, решение состояло в том, чтобы передать контекст из основного класса, я кое-что узнал сегодня 🙂