Загрузка данных с Firebase в RecyclerView

88
01 мая 2021, 19:30

Я получаю изображение с БД Fibase и вывожу его через RecyclerView. Все нормально, но т.к. изображение не маленькое, идет загрузка, и смотреть на это не очень весело. Я придумал решение. При старте активити я ставлю recyclerView.visibility = View.INVISIBLE. Идет загрузка данных. Я их не вижу. Но в этот момент я создаю другой поток, в котором я ставлю паузу на 1 секунду и recyclerView.visibility = View.VISIBLE. В результате у меня после запуска ничего не видно в течении 1 секунды, затем сразу полностью заполненный recyclerView. Во время этой паузы можно поставить анимацию загрузки и все отлично. Было бы идеально, если бы на этом конец. Но все это происходит во фрагменте, который можно переключать в Navigation Drawer. При запуске приложения все идет по плану, НО, если ОТКРЫТЬ эту же вкладку еще раз через боковое меню, то после паузы recyclerView не отображается. НО, если скролить, как будто там что-то есть, то recyclerView появится. Я понимаю, что это способ не очень, но, если у Вас есть идея решить его, буду рад. Также, буду рад другим вариантам решения этой проблемы. Заранее спасибо.

itemClickListener

override fun onItemClick(view: View?, position: Int, drawerItem: IDrawerItem<*>): Boolean {
                if (result.drawerItems[position-1].isEnabled){
                    result.closeDrawer()
                    return true
                }
                var fragment: Fragment? = null
                when (position) {
                    1 -> {
                        fragment = TestFragment1()
                    }
                    2 -> {
                        fragment = TestFragment2()
                    }
                }
                doAsync {
                    TimeUnit.MILLISECONDS.sleep(1000)
                    if (fragment != null) {
                        val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction()
                        fragmentTransaction.replace(R.id.frame_container, fragment)
                        fragmentTransaction.commit()
                    }
                }
                return false
            }
Answer 1

1 в Drawere естественно проверять открыт фрагмент или нет. Если открыт то не сеттить повторно. Это же логично. Зачем по 30 раз загружать одмн и тот же фрагмент. 2 заюзать для подгрузки картинок что то типа Glide, и ставить progressBar в картинку и placeHolder снизу. Вот собственно и все без костылей.И не нужны никакие потоки и визибалы))))

Добавлю:

   @Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    int id = menuItem.getItemId();
    Class fragmentClass = null;
    /*проверяем выбран ли пункт или еще нет , что бы не откывать повторно*/
    if (navigationView.getMenu().findItem(id).isChecked()) {
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }
    switch (id) {.......

Ну а картинку типа того, например пикассо в адаптере onBindViewHolder:

    try {
        Picasso.get()
                .load(url_image)
                .placeholder(R.drawable.placehoder)
                .fit()
                .centerCrop()
                .into(holder.image_news);
    } catch (Exception e) {
        e.printStackTrace();
        Picasso.get()
                .load(R.drawable.no_product)
                .into(holder.image_news);
    }
READ ALSO
Комбинация нескольких методов в RXJava2

Комбинация нескольких методов в RXJava2

Дело в том, что мне необходимо одновременно подтягивать данные из локальной базы, с сервера, при этом проверять подключение к интернету

81
В чем может быть проблема? ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

В чем может быть проблема? ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

Пытаюсь сделать helloworld RESTful web-service, но постоянно вылетает одна и та же ошибка: "javalang

150
JavaMailSender не подключается к SMTP Goggle

JavaMailSender не подключается к SMTP Goggle

Не подключается к узлу SMTP

100
Как вызвать JNI метод не из UI потока?

Как вызвать JNI метод не из UI потока?

У меня есть метод вот такой метод

104