onDraw в пользовательском представлении больше не выполняется после onStop / onStart - PullRequest
0 голосов
/ 24 мая 2018

Я использую пользовательский вид для рисования слайдера (с двумя ручками).

Пользовательское представление расширяет ConstraintLayout, я устанавливаю setWillNotDraw () в конструкторе, и все работает нормально - пока фрагмент, содержащий пользовательское представление, не остановится и не запустится снова.Начиная с этого момента, метод onDraw больше не выполняется после вызова invalidate ().Во время отладки я проверил флажок willNotDraw-Flag, и он по-прежнему имеет значение false.

  • Я использую kotlinx
  • Я вызываю setWillNotDraw (false) в блоке инициализации
  • Я проверил, если созданный фрагмент создается дважды, но все выглядит вполне нормально.
  • Я заверил, что invalidate () вызван.
  • Я заверил, что willNotDraw () имеет значение false.
  • Пользовательский вид добавляется к фрагменту вlayout.xml
  • onCreate, onCreateView, onViewCreated фрагмента вызывается только один раз

блок инициализации в пользовательском представлении:

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 Ответ

0 голосов
/ 24 мая 2018

Когда я писал свой вопрос, я звонил invalidate() везде, где я хотел перерисовать представление.

Я изменил блок инициализации на

init {
  view = inflate(context, R.layout.layout_slider, this)

  setWillNotDraw(false)
}

и использую view?.invalidate() вместо invalidate().

Теперь все работает нормально, хотя я понятия не имею, почему это должно иметь значение?У кого-нибудь есть идеи по этому поводу?

...