Android ViewPager - плавающие кнопки действий - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть ViewPager и кнопка плавающего действия в моем MainActivity.Каждый фрагмент в ViewPager представляет собой 6x6 GridLayout.При нажатии кнопки, я хочу начать анимацию перемещения ImageView внутри GridLayout.Начальная и целевая позиции предварительно определены в списке.

mViewPager = findViewById(R.id.pager)
mViewPager.adapter = mSectionsPagerAdapter
mViewPager.currentItem = currentFragment

val fab: View = findViewById(R.id.floatingActionButton)
fab.setOnClickListener(object : View.OnClickListener {
    override fun onClick(v: View) {
      val c =  mViewPager.currentItem
      val fromView = grid.getChildAt(fromList[c]) as ImageView
      val toView = grid.getChildAt(toList[c]) as ImageView
      val anim = TranslateAnimation(0f, toView.x - fromView.x, 0f, toView.y - fromView.y).apply {
          duration = 500
          fillAfter = false
      }
      fromView.startAnimation(anim)
}

Анимация работает, как и ожидалось, но проблема в том, что она работает только на первой странице.Когда я переключаюсь на другие страницы и нажимаю кнопку, ничего не происходит.Когда я возвращаюсь на первую страницу, тоже ничего не происходит.Может кто-нибудь объяснить, почему это так?Как мне это исправить?Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если у вас несколько страниц, не используйте setOffscreenPageLimit

Попробуйте добавить fab.setOnClickListener в каждый фрагмент.

0 голосов
/ 14 декабря 2018

Если вы знаете, сколько «страниц» у вас в приложении, вы можете установить offscreenpagesize .Иногда происходит смахивание страниц с фокуса, контекст этих фрагментов может быть потерян.

viewPage.setOffscreenPageLimit(<number of fragments 'tabs'>);

Подробнее об этом методе см. Здесь.

...