Я получаю изображение с БД 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
}
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);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Дело в том, что мне необходимо одновременно подтягивать данные из локальной базы, с сервера, при этом проверять подключение к интернету
Пытаюсь сделать helloworld RESTful web-service, но постоянно вылетает одна и та же ошибка: "javalang