onDraw в пользовательском представлении больше не выполняется после onStop/onStart
Я использую пользовательский вид для рисования слайдера (с двумя ручками).
Пользовательское представление расширяет ConstraintLayout, я устанавливаю setWillNotDraw() в конструкторе, и все работает нормально - пока фрагмент, содержащий пользовательское представление, не остановится и не запустится снова. Начиная с этого момента, метод onDraw больше не выполняется после вызова invalidate(). Во время отладки я проверил флажок willNotDraw-Flag, и он по-прежнему имеет значение false.
- Я пользуюсь kotlinx
- Я вызываю setWillNotDraw (false) в блоке инициализации
- Я проверил, если созданный фрагмент создается дважды, но все выглядит вполне нормально.
- Я заверил, что invalidate () вызывается.
- Я заверил, что willNotDraw() имеет значение false.
- Пользовательский вид добавляется к фрагменту в layout.xml
onCreate
,onCreateView
,onViewCreated
фрагмента вызывается только один раз
Блок init в пользовательском представлении:
init {
View.inflate(context, R.layout.layout_slider, this)
setWillNotDraw(false)
}
Функция onDraw в пользовательском представлении:
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
Timber.d("onDraw")
}
После остановки и запуска содержащий фрагмент onDraw
больше не выводится, а все остальное работает нормально.
1 ответ
Когда я написал свой вопрос, я позвонил invalidate()
везде, где я хотел перерисовать вид.
Я изменил блок инициализации на
init {
view = inflate(context, R.layout.layout_slider, this)
setWillNotDraw(false)
}
и использовать view?.invalidate()
вместо invalidate()
,
Теперь все работает нормально, хотя я понятия не имею, почему это должно иметь значение? Кто-нибудь есть идеи по этому поводу?