420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||||||
1 | ||||||
Передать адаптер в Intent22.08.2013, 09:32. Показов 2869. Ответов 23
Метки нет (Все метки)
Как это сделать???
Создал свой адаптер (My_adapter) для списка цветных строк и пытаюсь избавится от всех мест где раньше использовал стандратный алерт-диалог. Так передаются все значения (строки), но не адаптер.
0
|
22.08.2013, 09:32 | |
Ответы с готовыми решениями:
23
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] Передать через intent VIEW Как передать intent данные в Service? Передать через Intent информацию об Item |
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.08.2013, 11:30 | 2 |
правильнее создавать адаптер в activity_TreeList
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
22.08.2013, 12:37 [ТС] | 3 |
Если я правильно понял, адаптер можно создать только один раз. Типа "буферизировать". Есть несколько (около 10, но может быть больше) списков на несколько сотен строк. Заполнять их каждый раз долго. Внешний вид один для всех списков. Хочу пробуферизировать записи (заполнить адаптер) при старте программы или только один раз при первом открытии. А дальше при "переоткрытии" просто использовать готовые списки.
Раньше использовал AlertDialog со списком, но это долго и не красиво(сейчас строки цветные и со смещением как в дереве). Хочу заменить его на свой вариант. Причем универсальный для всех списков. Как передать УЖЕ созданный адаптер в активити ДО создания? Что-бы в OnCreate активит смог его положить в lvMain.setAdapter(out_treeAdapter); Добавлено через 9 минут p.s. Я еще плохо понимаю яву... В делфи был тип значения Pointer - ссылка на ЛЮБОЙ обьект в памяти - строку, число, класс. В другом юните можно создать глобальную переменную, доступную из любого класса. Можно создать таблицу(array)/список(list) "адаптеров" и передать в форму/активити только его номер в таблице для отображения. Можно ли и как подобное создать в яве?
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.08.2013, 21:03 | 4 |
ничего не понял.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
23.08.2013, 23:20 [ТС] | 5 |
хух.... Попробую еще раз обьяснить.
БЫЛО: много (больше 10) полей, которые выбирались из списка. Списки делались на основе AlertDialog с переключателями (http://developer.alexanderklim... alertradio) ХОЧУ: сделать СВОЙ выбор из списка на основе диалога, списка и адаптера. Поля гибче чем в AlertDialog (для каждой строки задаются цвет,ширина, боковое смещение, шрифт...). 0) Успешно сделал для примера один список со всеми этими характеристиками и он работает, но... 1) Списки большие и заполнять их каждый раз - долго. Хотелось бы заполнить только один раз за запуск в выделеный адаптер и просто его показывать несколько раз. Поэтому не хочу его заполнять в OnCreate активити. 2) Внешне активити одинаковое для ВСЕХ списков, поэтому создавать 10 активити на все варианты списков не хочу. Программа растет и не уверен что в следующей версии не прийдется добавить еще 20 других списков... Добавлено через 1 час 14 минут Хочу использовать для разных полей одно активити и РАЗНЫЕ адаптеры (одного типа но по разному заполненые)
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
23.08.2013, 23:47 | 6 |
не понимаю в чем проблема.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 00:34 [ТС] | 7 |
2V0v1k
Тогда перечитайте название темы и вопрос!!! My_adapter atl_1 = new My_adapter(this); intent.putExtra("adapter", atl_1); Выдает ошибку!
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 00:52 | 8 |
не вижу причин передавать адаптер.
Добавлено через 5 минут если нужно те же самые данные показывать в нескольких местах, то передавайте данные а не адаптер.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 05:55 [ТС] | 9 |
Адаптер - это еще и ХРАНИЛИЩЕ для данных (например при простых строках), готовых для вывода! Его надо ЗАПОЛНЯТЬ! На это уходит куча времени. Например 500 записей/строк довольно долго заполняеся и отображается (от 3х до 10ти секунд) и когда нужно заполнить все 10 полей из списков приходится тратить больше минуты только на заполнение анкет. Даже не так - не на заполнение, а на ожидание открытия списков. Если анкет нужно заполнить много... клиент теряет терпение! Списки приходится открывать ЧАСТО.
Я уже убрал анимацию что-бы сэкономить лишних полсекунды (что кстати не могу провернуть с AlertDialog) Можно хранить ТОЛЬКО данные. Но ГДЕ? И как их переать в общий адаптер встроеный в общее для всех списков активити? intent.putExtra("DATA", data_1); НЕ РАБОТАЕТ! Ничего кроме простых строк, чисел или таблиц из строк и чисел. А значит я не могу передать и ДАННЫЕ!
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 12:11 | 10 |
где вы такого начитались?
Добавлено через 2 минуты можно на bash выкладывать.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 12:33 [ТС] | 11 |
ВОПРОС ЗАКРЫТ!
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 12:52 | 12 |
у меня и первый и второй раз мгновенно на любое количество элементов.
Добавлено через 1 минуту адаптеры заполняются одним вызовом setData без какой либо задержки, не знаю что вы там накодили... Добавлено через 52 секунды и нет никакой для него разницы к количеству элементов. Добавлено через 1 минуту и если вы используете в нескольких местах одни и те же данные, достаточно передать List<T>
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 13:00 [ТС] | 13 |
Данные ВСЕГДА разные. Иначе не игрался бы с этим. Каждая строка заполняет много чего в getView. Кода в getView страницы на2-3. Для каждо строки задаются свой стиль, 3-4 надписи, видимость около 10 картинок, цвет фона для надписей, наличие рисованой галочки на выделеном элементе, древовидное смещение, разные обработи клика. Сейчас работаю над мультитатчевым зумом текста на строках и способностью сворачивать/скрывать подчиненные блоки как в дереве...
Но после одноразовой отрисовки в адаптере сохраняется куча буферизированой информации и повторное использование этого адаптера ускоряет открытие от 10 секунд до милисекунд... setDatа не помогает - у мея свой механизм заполнения в котором 6-7 параметров.. Через intent.putExtra("adapter", "1"); передаю номер используемого адаптера. ...смейтесь дальше! (Вежливее надо быть! Тем более если Вы - модератор)
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 13:03 | 14 |
вы в getView буферизируете какие-то данные в адаптер?
Добавлено через 1 минуту вы в адаптере добавили List<View> и в него добавляете все что создает getView что ли?
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 13:07 [ТС] | 15 |
Конечно! В момент вызова getView вызывается convertView = Inflater.inflate(R.layout.list_item_1, null); Причем разная для каждой строки. Процесс медлительный поэтому что-бы не вызывать ее для уже соданных convertView записывается рядом с данными в таблицу.
Более продвинутый/доработаный метод из http://startandroid.ru/ru/urok... apter.html
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
||||||
24.08.2013, 13:12 | 16 | |||||
ничего записывать не нужно, просто добавьте проверку convertView на null
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||||||
24.08.2013, 13:24 [ТС] | 17 | |||||
Я пробовал так (в ссылке это есть), но были сбои.. кажется с размерами строк или с их заполнением... менял нагло их местами и номерация шла с первой видимой. В результате при быстром листании получал 5-6 номеров 1
Надежнее оказалось складывать convertView в отельное поле класса Product (из ссылки) и в самом начале получать его по реальному номеру до сравнения в if (convertView == null) { Примерно так:
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 13:41 | 18 |
создавать view для каждого айтема это плохая практика,
я так понимаю вы для разных позиций создаете view с разных лаяутов(R.layout.list_item_1/R.layout.list_item_2/...)? Добавлено через 6 минут вы при создании адаптера циклом вызываете getView при для каждого айтема что у вас задержка такая что ли? Добавлено через 2 минуты getView вызывается при выводе определенного айтема и если не использовать convertView как по ссылке, то пролистывание страницы занимает столько-же как первый вывод. Добавлено через 4 минуты для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
24.08.2013, 13:41 [ТС] | 19 |
Возможно, но надо и альтернативы пока не придумал. Нужно создать ЦВЕТНЫЕ списки, желательно как в дереве-проводника Win. Некоторые строки - иформационные (группы/папки, узкие, не нажимаемые) а другие - легко нажимаемые (широкие). Позднее планирую КАЖДУЮ строку раскрашивать управляемым цветом. Когда-то нашел пример MultipleItemsList (могу скинуть), где это красиво и довольно шустро работает на 50 записей.
Угу!
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
24.08.2013, 13:47 | 20 |
тогда, как я писал выше:
Добавлено через 3 минуты в общем, списки всегда грузятся быстро неважно сколько айтемов, хоть миллион, и на создавать миллион view вам не хватит памяти и если у вас там где то большие задержки, то вы что-то делаете неправильно.
0
|
24.08.2013, 13:47 | |
24.08.2013, 13:47 | |
Помогаю со студенческими работами здесь
20
Как передать ссылку через Intent Передать ссылку на класс через Intent Передать через intent ArrayList объектов своего класса Пытаюсь передать данные через Intent, но выходит ошибка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |