#android #android-fragments #kotlin #greenrobot-eventbus
#Android #android-фрагменты #kotlin #greenrobot-eventbus
Вопрос:
Хорошо, итак, я новичок в разработке Android.
Я создаю приложение для записи. На том же экране, что и кнопка записи (для записи вещей) У меня также есть Fragment
, чтобы показать, сколько записей у меня есть. Я могу нажать кнопку записи, чтобы сделать запись, но количество записей не обновляется до тех пор, пока не будет обновлено состояние действия. Я хочу, чтобы количество записей обновлялось в режиме реального времени. Фрагмент будет виден и в другом действии, поэтому логика не может быть в основном действии записи.
Я только что интегрировал EventBus
в свой проект. Я настроил его так, чтобы событие было успешной записью, а подписчиком пока является фрагмент.
Значение фрагмента правильно получает сообщение о событии, но фрагмент не будет обновляться до тех пор, пока он не будет «обновлен» или, скорее, не пройдет свой жизненный цикл от onDestroyView()
до onCreateView()
.
Пожалуйста, помогите, я хочу иметь возможность обновлять фрагмент в режиме реального времени без необходимости использовать встроенные функции жизненного цикла.
Спасибо!
Редактировать:
Я нашел решение, просто удалив фрагмент, а затем повторно добавив его.
supportFragmentManager
.beginTransaction()
.remove(statsFragmentTwo)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)
.commit()
supportFragmentManager
.beginTransaction()
.add(R.id.main_stats_container_two, statsFragmentTwo)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
Но все же это выглядит не очень эффективным! Есть ли менее дорогостоящий способ?
Комментарии:
1. Вы должны использовать общую ViewModel, которая предоставляет общие данные как LiveData, см. codelabs.developers.google.com/codelabs/android-lifecycles/#5
Ответ №1:
Значение фрагмента правильно получает сообщение о событии, но фрагмент не будет обновляться до тех пор, пока он не будет «обновлен» или, скорее, не пройдет свой жизненный цикл от onDestroyView () до onCreateView ().
Я не понимаю идею — « Fragment
не будет обновляться». Если вы смогли успешно прослушать событие, вы можете немедленно обновить элементы пользовательского интерфейса, где вы перехватываете событие в своем фрагменте. Я просто создаю псевдокод.
if(eventListened)
updateUIElementsHere();
Вам не нужно ждать вызова функций жизненного цикла. В вашей updateUIElementsHere
функции вы могли бы рассмотреть возможность использования аналогичного кода, который есть в вашей onCreateView
функции.
Надеюсь, это поможет!
Комментарии:
1. Спасибо! Я обнаружил, что могу просто поместить код, который находится в onCreateView, в метод класса subscriber.
2. Приятно знать, что вы нашли проблему. 🙂