Вращающийся Android

У меня проблема при повороте моего приложения для Android после выполнения некоторых базовых действий, я продолжаю получать нулевую ошибку;

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

Хотя я знаю, что означает ошибка, я не вижу причин, по которым это может произойти при повороте устройства (происходит как на моем физическом устройстве разработчика, так и в эмуляторе). Код, на который он жалуется, (который находится в моем методе onAttach во фрагменте);

TextView totalMatchGoals = (TextView) getView().findViewById(R.id.txtResInfoGoals);

При вращении устройства изображение обновляется? Даже тогда я не могу понять, почему это может вызвать проблемы.

Любая помощь приветствуется.

1
0
62
2

Ответы 2

Проверяйте внутри onCreateView() после расширения макета или onViewCreated(), когда представления действительно существуют.

Спасибо. При вызове этого findViewById, если я не поворачиваю представление, он работает нормально, где я борюсь, почему он работает в onAttach, но когда я его поворачиваю, это не так.

Carl Bruiners 14.03.2018 23:59

Не сопротивляйтесь, изучите еще немного и подумайте: вы пытаетесь получить представление. Когда вы поворачиваете устройство, вид и действия уничтожаются, поэтому создается новый экземпляр активности и фрагмента. Никогда не пытайтесь получить представления внутри onAttach(), поскольку этот метод используется только для привязки фрагмента к активности размещения, если последняя реализует интерфейс фрагмента. Вместо этого сделайте это одним из упомянутых мною методов.

Chisko 15.03.2018 00:02

Если вы не настроили AndroidManifest.xml для других действий, Android уничтожит и воссоздает всю вашу активность при обнаружении изменения ориентации.

При воссоздании действия onAttach вызывается перед заполнением представления, согласно: https://developer.android.com/reference/android/app/Fragment.html

Если вы хотите обработать изменение ориентации в коде вашей деятельности, добавьте следующее:

AndroidManifest.xml

<activity
    android:name = "<your-activity>"
    android:configChanges = "orientation|screenSize"
    ...

В своем классе Activity переопределите этот метод, чтобы справиться с изменением ориентации:

  @Override
    public void onConfigurationChanged(Configuration newConfig) {}

Больше информации:

Другие вопросы по теме