Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
#1

Метод фрагмента onResume() перестает вызываться после вызова метода recreate() для Activity - Программирование Android

09.03.2016, 10:21. Просмотров 556. Ответов 14
Метки нет (Все метки)

Такая проблема:после вызова метода recreate() методы фрагментов onCreate() and onCreateView() вызываются, а он Resume() - нет! Но если заблокировать девайс и разблокировать, то он вызывается. Подскажите пожалуйста, с чем это может быть связано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2016, 10:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Метод фрагмента onResume() перестает вызываться после вызова метода recreate() для Activity (Программирование Android):

После повторного вызова фрагмента переменные становятся null
Первый раз фрагмент вызывается в методе onCreate, и все нормально выводиться....

Android: как не перезагружать webview в activity при OnResume?
Описание проблемы: есть activity A (основная android.intent.category.LAUNCHER)....

Какой метод фрагмента срабатывает после закрытия диалога?
Запускаю FragmentActivity, в методе onResume запускаю DialogFragment. Пока...

Как запустить activity внутри фрагмента
Как запустить activity внутри фрагмента?

Артефакт при осуществлении первой попытки обратного вызова для метода onAccessibilityStateChanged
Я использую в своем приложении функциональность, связанную с дополнительными...

Скрыть тулбар у 1 фрагмента Tabbed Activity + toolbar + Searchview
есть Tabbed Activity У неё тулбар в нем SearchView/ в Tabbed Activity 2...

14
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.03.2016, 11:14 #2
danek130995, интересно, я с таким методом не сталкивался. А onStart, onPause вызываются?
0
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 11:38  [ТС] #3
CoolMind, после recreate() перестает вызываться onPause(), но onStart() продолжает работать
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
09.03.2016, 12:01 #4
Цитата Сообщение от danek130995 Посмотреть сообщение
после вызова метода recreate()
Цитата Сообщение от danek130995 Посмотреть сообщение
но onStart() продолжает работать
это бред

что за метод recreate ?
если это свой метод то как ты думаешь, тут все телепаты и знают что в нем написано?
0
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 12:02  [ТС] #5
Паблито, это не свой метод! Это метод Activity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   
 
 * Cause this Activity to be recreated with a new instance.  This results
     * in essentially the same flow as when the Activity is created due to
     * a configuration change -- the current instance will go through its
     * lifecycle to {@link #onDestroy} and a new instance then created after it.
     */
 public void recreate() {
        if (mParent != null) {
            throw new IllegalStateException("Can only be called on top-level activity");
        }
        if (Looper.myLooper() != mMainThread.getLooper()) {
            throw new IllegalStateException("Must be called from main thread");
        }
        mMainThread.requestRelaunchActivity(mToken, null, null, 0, false, null, null, false);
    }
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
09.03.2016, 12:06 #6
жесть, неужели такая острая необходимость пересоздавать активити?
архитектура хромает?
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 12:10  [ТС] #7
Паблито, меняется язык приложения, нужно сделать recreate()
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
09.03.2016, 12:16 #8
для интереса проверил - onResume фрагмента вызывается
делал так - в onCreate активити добавил фрагмент через фрагмент менеджер
на кнопку повесил слушатель и по клику вызывал recreate()

в onResume фрагмента вывод в лог показал что метод срабатывает два раза после recreate

моя информация в принципе useless, но можно предположить что косяк в том коде который в recreate()
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.03.2016, 12:17 #9
Цитата Сообщение от danek130995 Посмотреть сообщение
меняется язык приложения, нужно сделать recreate()
Что-то мне кажется, это плохой способ. Возможно, recreate() - глючный метод, но его использование вижу первый раз. В случае принудительного пересоздания активности можно потерять какие-то данные, например. В любом случае, эту операцию можно провести через завершение и открытие активности заново. Кроме того, непонятно, а что будет, если пользователь вернётся кнопкой "Назад" на предыдущую активность, её тоже надо будет пересоздавать?
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 12:26  [ТС] #10
CoolMind, нет, там нет такого, кнопка назад - всегда выход из приложения.
Паблито, У меня фрагмент создается через Fragment fragment = new Fragment() и затем уже через фрагмент-менеджер replace()

Добавлено через 34 секунды
CoolMind, как вы предлагаете
Цитата Сообщение от CoolMind Посмотреть сообщение
операцию можно провести через завершение и открытие активности заново
Добавлено через 4 минуты
CoolMind, вот так уже делал:
Java
1
2
                finish();
                startActivity(new Intent(this, MainActivity.class));
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.03.2016, 12:27 #11
danek130995, например, так: http://stackoverflow.com/a/2488427/2914140.
Java
1
2
3
Intent starterIntent = getIntent();
finish();
startActivity(starterIntent);
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 12:30  [ТС] #12
CoolMind, recreate() Выполняется очень быстро, а стартактивити - очень долгая операция. К тому же, recreate() помогает сохранить текущий фрагмент открытый. В этом и преимущество recreate()
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.03.2016, 13:19 #13
Цитата Сообщение от danek130995 Посмотреть сообщение
recreate() помогает сохранить текущий фрагмент открытый
В этом случае происходит ли полный цикл пересоздания фрагмента? Если да, чем отличается от такового у startActivity? Или запоминается только номер фрагмента?
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 949
09.03.2016, 13:20  [ТС] #14
CoolMind, видимо, полный цикл не происходит
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.03.2016, 13:23 #15
danek130995, хорошо. Вы не могли бы ради эксперимента попробовать сделать это в новом проекте? Понимаю, что долго, но если будет желание, отпишитесь. Вдруг, там происходит полный цикл.
1
09.03.2016, 13:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2016, 13:23
Привет! Вот еще темы с решениями:

Везде ли выполняется метод finish() для закрытия activity
После startActivityForResult в другой activity не срабатывает метод finish();,...

Передача всего объекта в метод Main для вызова метода
Добрый день! Подскажите пожалуйста. Есть например класс Student. В нём есть...

Действия до и после вызова метода
Подскажите, пожалуйста, по реализации. Дан класс 'ServiceBase', содержащий...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru