Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
1

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

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

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

EditText долго отображается
Добрый день! Делаю для себя редактор, заодно и учусь писать приложения для...

Форма Грузится Долго
Всем привет... У меня небольшая проблемка возникла (ну как небольшая, меня...

долго открывается форма
Итоговая форма в ленточном виде из двух десятков полей, в примечании формы еще...

Первый раз долго открывается форма
Доброго вечера, уважаемые. Появилась такая закавыка - не знаю как решить....

Не отображается форма
Доброго! Я уже об стену головой бьюсь, а она все не соображает( Пишу прогу,...

4
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 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 обратно. Мне помог такой подход с выводом диалога с кучей элементов в нем. Ну и не забудьте прогрессбар прикрутить
1
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
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 (т.к. в нём реализовано скрытие).
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
21.08.2014, 13:56 4
Ну лучше вообще прогресс бар выводить в диалоге, и запретить его закрытие.
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
21.08.2014, 14:19  [ТС] 5
Spelcrawler, честно говоря, ещё не пробовал так делать. Я обычно использую AlertDialog для вывода диалоговых окон (информация или вопрос). Впрочем, теперь ProgressBar работает, спасибо вам за помощь.
0
21.08.2014, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 14:19

Не отображается форма C#
Здравствуйте. Пробую создать простейшую форму, в которой выполняется постоянное...

Не отображается форма
При нажатии на кнопку, первая форма скрывается, а вторая не открывается. ...

Не отображается кнопочная форма
Здравствуйте, создал кнопочную форму через диспетчер кнопочных форм, но что-то...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru