2014-12-18 2 views
1

У меня возникли проблемы с активностью приложения Android.Активность была восстановлена ​​дважды при изменении ориентации

Я обнаружил, что мое приложение дважды входит в метод onCreateView() этого действия, когда меняется ориентация, и это вызывает у меня проблемы. Когда я нажимаю соответствующую кнопку, и эта активность начинается, все нормально, но в этом случае, когда меняется ориентация, у меня есть некоторые проблемы, потому что она вводится дважды, т.е. активность перезапускается дважды ...

... Кто-нибудь знает поведение активность при изменении ориентации? Почему это происходит?

Большое спасибо.

+0

У вас есть что-нибудь в 'onStart()'? – MeetTitan

+0

Нет, у меня нет такого метода. – KryNaC

ответ

2

Поскольку onCreateView() не является частью жизненного цикла деятельности, а является частью фрагмента, я предполагаю, у вас есть фрагмент где-то в вашей деятельности. Также я предполагаю, что вы добавите этот фрагмент вручную, используя FragmentManager и FragmentTransaction. Поскольку Android сохраняет все добавленные фрагменты между изменениями ориентации, вполне возможно, что вы не проверяете, присутствует ли ваш фрагмент в этом действии, поэтому вы добавляете его снова, что вызывает дополнительный onCreateView.

Если это так, вам нужно проверить, является ли ваш savedInstance пустым в пределах onCreate. Если это - вы добавляете фрагмент. В противном случае активность восстанавливается, поэтому фрагмент уже существует.

Множество предположений для ответа, я знаю. Но я до сих пор овладение своих телепатических навыков :)

+0

Да @Pavel, это фрагмент, загруженный в действие, я добавляю его с помощью FragmentManager и FragmentTransaction, и у меня есть методы 'onCreate()' и 'onCreateView() ... Я должен был это увидеть. Должен ли я удалить метод onCreate()? Как я проверяю, есть ли еще фрагмент раньше? Ty – KryNaC

+0

Но я использую 'getSupportFragmentManager(). BeginTransaction(). Replace (R.id.xxx, фрагмент) .commit();' not 'getSupportFragmentManager(). BeginTransaction(). Add (R.id.xxx, фрагмент) .commit(); '... тогда я не добавляю еще один фрагмент, я заменяю фрагмент – KryNaC

+0

, вы должны вызвать замену фрагмента из ActivityCreate Activity. Не из Фрагмента. Пожалуйста, убедитесь, что это так. –

0

Попробуйте добавить это в AndroidMainfest.xml в своей деятельности:

android:configChanges="orientation|screenSize|keyboardHidden" 

Это означает, что не воссоздавать активности при изменении ориентации.

Смежные вопросы