Почему public переменную не видно в другом классе? У меня есть класс MainActivity и я делал в нем внутренний класс, чтобы использовать AsyncTask. Я решил раскидать эти классы в разные пакеты. Но после этого в классе для AsyncTask перестало видеть мои переменные, хотя они глобальные и public. Ну к примеру:
В классе MainActivity у меня есть поле перед всеми методамиpublic boolean isNavigationDrawerItemEnabled = false;
В моем AsyncTask в другом пакете здесь эту переменную уже никак не видит@Override
protected void onPreExecute() {
super.onPreExecute();
if (!isNavigationDrawerItemEnabled) {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Новые");
progressDialog.setMessage("Загрузка...");
progressDialog.setIndeterminate(false);
progressDialog.show();
}
}
Вроде бы банальщина, но я почему-то затупил. Можете подсказать?

21 Авг 2019 в 07:05
271 +1
0
Ответы
1

В Java модификатор доступа public позволяет видеть переменные вне класса, но только если они находятся в том же пакете. Если вы переместили ваш AsyncTask в другой пакет, то доступ к переменной isNavigationDrawerItemEnabled у вас не будет из-за того, что она не находится в том же пакете.

Для того чтобы решить эту проблему, вам нужно либо переместить ваш AsyncTask обратно в тот же пакет, где находится класс MainActivity, либо изменить модификатор доступа переменной на protected или default (без явного указания модификатора доступа). В этом случае переменная будет доступна из подклассов в других пакетах.

Например, если вы измените модификатор доступа на protected:protected boolean isNavigationDrawerItemEnabled = false;
то ваш AsyncTask сможет обратиться к переменной isNavigationDrawerItemEnabled из другого пакета.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир