Фрагмент Spla sh не будет отображаться при использовании button.performClick () - PullRequest
0 голосов
/ 11 апреля 2020

edit: 2020.4.12 правильная опечатка из Button.performClick () в button.performClick ()

Я пишу приложение, которое должно отображать spla sh страницу / фрагмент в течение нескольких секунд при запуске затем отобразите следующий фрагмент в navgraph. В navgraph есть семь фрагментов, которые я могу перемещаться по этим фрагментам очень хорошо.

Проблема связана с фрагментом spla sh, я могу получить фрагмент spla sh только для отображения / раздувания, когда button.onClickListener установлен, чтобы принять ручной ввод пользователя -> щелчок. (против использования button.performClick())

Желаемым конечным результатом является отображение макета фрагмента, состоящего из представления изображения и текста, в течение нескольких секунд при запуске приложения до отображения следующего макета фрагмента в навигационном графе, без имея пользователя, чтобы щелкнуть или нажать что-нибудь. Я пытался использовать threadleep, runnable с обработчиком, и даже некоторое время l oop с executeClick (). Ни один из которых не дал приемлемых результатов. Наиболее близким к достижению желаемого результата является следующее:


class SplashFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater,
                     rootContainer: ViewGroup?,
                    savedInstanceState: Bundle?): View {
        return inflater.inflater(R.layout.fragment_splash, rootContainer, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        button.setOnClickListener {
            updateABode()
        }

       // pizzaLoop initialized to give about 4 seconds delay
       val pizzaLoop = 1500000000
       while (pizzaLoop > 0) {
           pizzaLoop--
           if (pizzaLoop == 0) {
              button.performClick()
           }
       }

    private fun updateABode {
        val ABode = "A"  // hard coded for testing purposes
        when (ABode) {
            "B" -> // for testing purposes only -- does nothing
            "A" -> findNavController().navigate(R.id.action_splashFragment_to_firmwareFragment)
        }
     }
}

При установленной pizzaL oop фрагмент spla sh не будет раздуваться, но я вижу задержку через прошивку обновление экрана. (фактически все, что я получаю, это белый пустой экран, тогда последующие вызовы класса SplashFragment не показывают ничего, кроме экрана firmwareFragment (следующий на navgraph) - и задержка pizzaL oop заметна).

Когда я закомментируйте pizzaL oop, затем фрагмент spla sh отобразится, как и предполагалось, но мне нужно нажать кнопку, чтобы вызвать следующий фрагмент в navgraph (остальная часть navgraph работает нормально).

Это как метод button.performClick () предотвращает надувание фрагмента spla sh.

1 Ответ

0 голосов
/ 12 апреля 2020

РЕДАКТИРОВАТЬ: 2020.4.12 ДЛЯ ПРАВИЛЬНО РАЗМЕСТИТЬ РЕШЕНИЕ.

class SplashFragment : Fragment() {

private val handler: Handler = Handler()
private val updateRunnable: Runnable = Runnable { updateABode() }

    override fun onCreateView(inflater: LayoutInflater,
                     rootContainer: ViewGroup?,
                    savedInstanceState: Bundle?): View {
        return inflater.inflater(R.layout.fragment_splash, rootContainer, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        button.setOnClickListener {
            handler.removeCallbacks(updateRunnable)
        }
        handler.postDelayed(updateRunnable, 4000)
      }

    private fun updateABode {
        val ABode = "A"  // hard coded for testing purposes
        when (ABode) {
            "B" -> // for testing purposes only -- does nothing
            "A" -> findNavController().navigate(R.id.action_splashFragment_to_firmwareFragment)
        }
     }
}
...