Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
#1

Долго не отображается форма - Android

21.08.2014, 10:24. Просмотров 398. Ответов 4
Метки нет (Все метки)

Здравствуйте!
В приложении есть несколько Activity и Fragment'ов. В случае если соединение с Интернетом медленное, формы сначала открываются, рисуются ActionBar вверху и белый экран. Затем происходит чтение данных с сайта, заполнение ListView. Когда всё сделано, мгновенно всё отображается. Т.е. белый экран показывается несколько секунд, как будто приложение зависло. Я туда и ProgressBar вставлял, и порядок вывода компонентов менял. ProgressBar даже не показывается. Просто в фоновом потоке заполняется ListView (через AsyncTask) и затем всё сразу отображается.
Хотелось бы, чтобы пользователь видел во время работы с Интернетом хотя бы ProgressBar. Если нужен код, могу привести. Никто не сталкивался с таким поведением?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 10:24     Долго не отображается форма
Посмотрите здесь:

Android Очень долго компилируется
Android SurfaceView не отображается
Не отображается Google map! Android
Компиляция занимает примерно полторы минуты. Очень долго Android
Android Как долго деньги идут из AdMob в PayPal
Android Долго открывается активность
Android Не отображается ListView
В приложении не отображается кириллица Android
Android Media player долго грузится поток
Android Не отображается ImegaeView
Android Почему Google map долго грузит детали карты в определенных координатах?
Android EditText долго отображается

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
21.08.2014, 11:46     Долго не отображается форма #2
В onResume() добавьте
Java
1
myListView.setVisibility(View.GONE)
Запускайте AsyncTask в самом конце onResume(), и у него в методе onPoestExecute() сделайте видимость myListView обратно. Мне помог такой подход с выводом диалога с кучей элементов в нем.

Добавлено через 1 минуту
В onResume() добавьте
Java
1
myListView.setVisibility(View.GONE)
Запускайте AsyncTask в самом конце onResume(), и у него в методе onPoestExecute() сделайте видимость myListView обратно. Мне помог такой подход с выводом диалога с кучей элементов в нем. Ну и не забудьте прогрессбар прикрутить
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
21.08.2014, 13:45  [ТС]     Долго не отображается форма #3
Spelcrawler, спасибо вам за ответ. Попробую. Если получится, вам будет +.

Добавлено через 41 минуту
Понял свою ошибку. Прежде я составлял ListView из нескольких частей: добавлял к нему шапку (Header) и подвал (Footer). При этом рисовал ProgressBar в шапке. Соответственно, он никогда не показывался, потому что ListView отображался целиком на последней стадии рисования, где я автоматически ProgressBar убирал. Вывод: ProgressBar не надо вставлять в Header.
Решил следующим образом. Рядом с ListView поместил ProgressBar посередине экрана
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">
 
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal" />
 
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
</LinearLayout>
На всякий случай, в onCreate поставил
Java
1
2
lvMain.setVisibility(View.GONE);
pb.setVisibility(View.VISIBLE);
В методе onPostExecute AsyncTask'а добавил строки:
Java
1
2
pb.setVisibility(View.GONE);
lvMain.setVisibility(View.VISIBLE);
Переопределение метода onResume в данном случае может помешать, потому что при скрытии и последующем отображении Activity может исчезнуть ListView (т.к. в нём реализовано скрытие).
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
21.08.2014, 13:56     Долго не отображается форма #4
Ну лучше вообще прогресс бар выводить в диалоге, и запретить его закрытие.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
21.08.2014, 14:19  [ТС]     Долго не отображается форма #5
Spelcrawler, честно говоря, ещё не пробовал так делать. Я обычно использую AlertDialog для вывода диалоговых окон (информация или вопрос). Впрочем, теперь ProgressBar работает, спасибо вам за помощь.
Yandex
Объявления
21.08.2014, 14:19     Долго не отображается форма
Ответ Создать тему
Опции темы

Текущее время: 08:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru