Здравствуйте.Имеется cursorloader в котором получаю из бд тв программу на текущее время.Жму на кнопку и создаю фрагмент с listview в ктором вызываю cursor loaderТ.к. данных много(500 каналов на неделю) данные появляются не сразу а через секунды 3(пустая форма потом данные).Пробовал к фрагменту прикрутить эффект задержки появления.Но все равно не то.Подскажите как показать фрагмент после загрузки данных?
Asked
Active
Viewed 160 times
2 Answers
0
Сначала получите данные, в это время показывайте ProgressDialog, например. Поймайте момент, когда данные из БД будут получены полностью и только потом создавайте фрагмент и передавайте ему данные.
Или вы можете обернуть ListView и ProgressBar в FrameLayout. Пока данные считываются под списком будет крутиться кружок. Не забудьте скрывать его при загрузке данных
0
Например создаете класс itemTv
public class itemTv {
private int _id;
private String titleTv;
private String programsTv;
public itemTv(int _id, String titleTv, String programsTv){
super();
this._id = _id;
this.titleTv = titleTv;
this.programsTv = programsTv;
}
public int get_id() {
return _id;
}
public String getTitleTv() {
return titleTv;
}
public String getProgramsTv() {
return programsTv;
}
}
Потом при onLoadFinished:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data != null && data.moveToFirst()){
List<itemTv> programs = new ArrayList<>();
for (int i=0; i < data.getCount(); i++){
programs.add(new itemTv(
id,
title,
programs
));
}
//Я честно говоря не понял какая у вас схема база данных и как вы обращаетесь к базе чтобы получить каналы, а также получить программу передач отдельного канала, но думаю вы схему поняли, определяете Item вашего канала как вы желаете, дальше делаете массив List<с вашим item> и заполняете его в onLoadFinished и отправляете в BaseAdapter где вы требуете List<с вашим item>
}
}
Iman
- 591
-
А так память жрать не будет?в таблице программа емть поле name и в таблице channel есть name вот из channel join да where pr.name=ch.name значит канал наш а так же та еще проверка на текущее время.в общем проверок полно. – Ivan Jan 16 '17 at 20:13
-
@Ivan память жрать не будет, ибо вы уже все подгрузили, здесь просто ваш список обрабатывается, да и легче уже потом этим списком управлять, поиск и т.д. Тогда вам нужно 2
itemа сделать, 1 просто для меню, т.е. отображения списка каналов, другой уже список программ для канала. – Iman Jan 16 '17 at 20:20 -
-
Каким образом дополнительная промежуточная перегонка в коллекцию после выборки из БД ускорит отображение данных? – pavlofff Jan 17 '17 at 05:01
-
-
@Ivan не имея вашего кода могу сказать, что ускорит оптимизация запроса, наверное или что то другое, может быть .. – pavlofff Jan 17 '17 at 05:25
onLoadFinished– Jan 16 '17 at 18:13AsyncTask, а вообще я вроде где-то видел или слышал какую-то ОРМ (ORM) – Jan 16 '17 at 18:25Stringпередач. В том жеCursorLoaderприonLoadFinishedзаполнить массив с вашим объектом и передать егоBaseAdapterтак думаю будет легче идти процесс. – Iman Jan 16 '17 at 19:27CursorLoaderуже работает в асинхронном потоке иAsyncTaskбудет совершенно лишним, вы правы.. Фильтр по БД сCursorLoader, может поможет. Вообще нужен код, как вы запросы делаете и тд. Выборка 500 записей не может вешать данные на 3 секунды. – pavlofff Jan 17 '17 at 05:06