Метод onChange AdapterDataObserver работает, но показывает пустое представление в течение доли секунды - PullRequest
1 голос
/ 07 марта 2019

В настоящее время я использую RecyclerView с привязкой данных MVVM (хорошо, привязка данных может не иметь значения). В любом случае, я пытаюсь показать определенный вид компоновки, когда данные в recyclerView пустой. Это работает, когда я использую AdapterDataObserver onChanged (следующий код). Но проблема в том, что когда я откройте мое приложение, мое представление пустого времени отображается только на долю секунды (например, сбой / щелчки), а затем показывает списки в обычном режиме. Я не могу исправить проблема, чтобы не показывать это пустое время просмотра при открытом экране. Некоторые примеры кода или кода будут отличными! Я хотел бы услышать от вас!

Часть кода ниже

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     super.onViewCreated(view, savedInstanceState)

     viewModel = activity?.run {
         ViewModelProviders.of(this, viewModelFactory).get(ShopViewModel::class.java)
     } ?: throw Exception("Invalid Activity")

     val adapter = ShopRecyclerAdapter(viewModel, mIndex))

     val emptyObserver = object : RecyclerView.AdapterDataObserver() {
         override fun onChanged() {
             val isEmpty = adapter.itemCount == 0
             val isfavImage = if (mIndex == 2) R.drawable.img_fav else R.drawable.img_none
             val isNoData = if (isEmpty || adapter == null) View.VISIBLE else View.GONE
             val visibility = if (isEmpty || adapter == null) View.GONE else View.VISIBLE
             binding.layoutSwipeRefresh.visibility = visibility
             binding.noneLayout.visibility = isNoData
             binding.noneLayout.item_coupon_none_im.setImageResource(isfavImage)
         }
     }
     adapter.registerAdapterDataObserver(emptyObserver)
     emptyObserver.onChanged()


     val recyclerView: RecyclerView = binding.shopRecycleView
     val layoutManager = GridLayoutManager(activity, 1, RecyclerView.VERTICAL, false)
     recyclerView.layoutManager = layoutManager

1 Ответ

0 голосов
/ 07 марта 2019

Как вы получаете данные для списка?Скажем, у вас есть loading state, который имеет только загрузочный счетчик.После получения данных для списка зарегистрируйте наблюдателя, чтобы отобразить либо пустое представление, либо заполнить список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...