Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Передать адаптер в Intent - Программирование Android

22.08.2013, 09:32. Просмотров 1743. Ответов 23
Метки нет (Все метки)

Как это сделать???
Создал свой адаптер (My_adapter) для списка цветных строк и пытаюсь избавится от всех мест где раньше использовал стандратный алерт-диалог.

Так передаются все значения (строки), но не адаптер.
Java
1
2
3
4
5
            Intent intent = new Intent(this, activity_TreeList.class);
            My_adapter atl_1 = new My_adapter(this);
            // передаем значения нужные ДО показа - заголовок, текст кнопок...
            intent.putExtra("adapter", atl_1); // адаптер с начинкой из строк
            startActivityForResult(intent, 1);
Как же тогда???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 09:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передать адаптер в Intent (Программирование Android):

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
Выдает такую ошибку, хотя смартфон видит, он разрешает отладку, при запуске...

Передать через intent VIEW
Как можно через intent передать "VIEW", полученное вот таким способом: View...

Передать через Intent информацию об Item
Выводит ошибку и приложение закрывается by Force Close ошибка по ходу в...

Передать ссылку на класс через Intent
Возможно ли подобное? Есть класс, в котором храню больше 50 параметров...

Как передать ссылку через Intent
Как можно в такой класс package app.kray.anddev; import...

Как передать intent данные в Service?
Здравствуйте! как передать intent данные в класс с расширением Service?...

23
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 11:30 #2
правильнее создавать адаптер в activity_TreeList
0
Tester64
396 / 357 / 46
Регистрация: 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
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 21:03 #4
ничего не понял.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
23.08.2013, 23:20  [ТС] #5
хух.... Попробую еще раз обьяснить.

БЫЛО: много (больше 10) полей, которые выбирались из списка. Списки делались на основе AlertDialog с переключателями (http://developer.alexanderklimov.ru/android/alertdialog.php#alertradio)

ХОЧУ: сделать СВОЙ выбор из списка на основе диалога, списка и адаптера. Поля гибче чем в AlertDialog (для каждой строки задаются цвет,ширина, боковое смещение, шрифт...).

0) Успешно сделал для примера один список со всеми этими характеристиками и он работает, но...

1) Списки большие и заполнять их каждый раз - долго. Хотелось бы заполнить только один раз за запуск в выделеный адаптер и просто его показывать несколько раз. Поэтому не хочу его заполнять в OnCreate активити.

2) Внешне активити одинаковое для ВСЕХ списков, поэтому создавать 10 активити на все варианты списков не хочу. Программа растет и не уверен что в следующей версии не прийдется добавить еще 20 других списков...

Добавлено через 1 час 14 минут
Хочу использовать для разных полей одно активити и РАЗНЫЕ адаптеры (одного типа но по разному заполненые)
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 23:47 #6
не понимаю в чем проблема.
0
Tester64
396 / 357 / 46
Регистрация: 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
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 00:52 #8
не вижу причин передавать адаптер.

Добавлено через 5 минут
если нужно те же самые данные показывать в нескольких местах, то передавайте данные а не адаптер.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 05:55  [ТС] #9
Адаптер - это еще и ХРАНИЛИЩЕ для данных (например при простых строках), готовых для вывода! Его надо ЗАПОЛНЯТЬ! На это уходит куча времени. Например 500 записей/строк довольно долго заполняеся и отображается (от 3х до 10ти секунд) и когда нужно заполнить все 10 полей из списков приходится тратить больше минуты только на заполнение анкет. Даже не так - не на заполнение, а на ожидание открытия списков. Если анкет нужно заполнить много... клиент теряет терпение! Списки приходится открывать ЧАСТО.

Я уже убрал анимацию что-бы сэкономить лишних полсекунды (что кстати не могу провернуть с AlertDialog)

Можно хранить ТОЛЬКО данные. Но ГДЕ? И как их переать в общий адаптер встроеный в общее для всех списков активити?

intent.putExtra("DATA", data_1); НЕ РАБОТАЕТ! Ничего кроме простых строк, чисел или таблиц из строк и чисел.
А значит я не могу передать и ДАННЫЕ!
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 12:11 #10
где вы такого начитались?

Добавлено через 2 минуты
можно на bash выкладывать.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 12:33  [ТС] #11
где вы такого начитались?
можно на bash выкладывать.
Раз Вы такой умный - выкладывайте... А я это только что сделал! Первый раз открывает список на 500 элементов долго, второй мгновенно. Отдельный класс для одноразового заполнения и хранения ВСЕХ адаптеров... Пока-что в одном потоке и именные переменные для всех адаптеров а не таблица адаптеров, но это позднее.

ВОПРОС ЗАКРЫТ!
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 12:52 #12
у меня и первый и второй раз мгновенно на любое количество элементов.

Добавлено через 1 минуту
адаптеры заполняются одним вызовом setData без какой либо задержки, не знаю что вы там накодили...

Добавлено через 52 секунды
и нет никакой для него разницы к количеству элементов.

Добавлено через 1 минуту
и если вы используете в нескольких местах одни и те же данные, достаточно передать List<T>
0
Tester64
396 / 357 / 46
Регистрация: 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
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:03 #14
вы в getView буферизируете какие-то данные в адаптер?

Добавлено через 1 минуту
вы в адаптере добавили List<View> и в него добавляете все что создает getView что ли?
0
Tester64
396 / 357 / 46
Регистрация: 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/uroki/vse-...j-adapter.html
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:12 #16
ничего записывать не нужно, просто добавьте проверку convertView на null
Java
1
2
3
 if (convertView == null) {
      convertView = lInflater.inflate(R.layout.item, parent, false);
    }
ListView сам все сохраняет и использует не больше чем ему нужно для вывода на экран.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:24  [ТС] #17
Я пробовал так (в ссылке это есть), но были сбои.. кажется с размерами строк или с их заполнением... менял нагло их местами и номерация шла с первой видимой. В результате при быстром листании получал 5-6 номеров 1

Надежнее оказалось складывать convertView в отельное поле класса Product (из ссылки) и в самом начале получать его по реальному номеру до сравнения в if (convertView == null) {
Примерно так:
Java
1
2
Product Item1 = objects.get(position);
convertView = Item1.view;
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:41 #18
создавать view для каждого айтема это плохая практика,
Цитата Сообщение от Tester64 Посмотреть сообщение
Я пробовал так (в ссылке это есть), но были сбои..
я так понимаю вы для разных позиций создаете view с разных лаяутов(R.layout.list_item_1/R.layout.list_item_2/...)?

Добавлено через 6 минут
вы при создании адаптера циклом вызываете getView при для каждого айтема что у вас задержка такая что ли?

Добавлено через 2 минуты
getView вызывается при выводе определенного айтема и если не использовать convertView как по ссылке, то пролистывание страницы занимает столько-же как первый вывод.

Добавлено через 4 минуты
для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:41  [ТС] #19
Цитата Сообщение от V0v1k Посмотреть сообщение
создавать view для каждого айтема это плохая практика,
Возможно, но надо и альтернативы пока не придумал. Нужно создать ЦВЕТНЫЕ списки, желательно как в дереве-проводника Win. Некоторые строки - иформационные (группы/папки, узкие, не нажимаемые) а другие - легко нажимаемые (широкие). Позднее планирую КАЖДУЮ строку раскрашивать управляемым цветом. Когда-то нашел пример MultipleItemsList (могу скинуть), где это красиво и довольно шустро работает на 50 записей.

Цитата Сообщение от V0v1k Посмотреть сообщение
я так понимаю вы для разных позиций создаете view с разных лаяутов(R.layout.list_item_1/R.layout.list_item_2/...)?
Угу!
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:47 #20
Цитата Сообщение от Tester64 Посмотреть сообщение
Возможно, но надо и альтернативы пока не придумал. Нужно создать ЦВЕТНЫЕ списки, желательно как в дереве-проводника Win. Некоторые строки - иформационные (группы/папки, узкие, не нажимаемые) а другие - легко нажимаемые (широкие). Позднее планирую КАЖДУЮ строку раскрашивать управляемым цветом. Когда-то нашел пример MultipleItemsList (могу скинуть), где это красиво и довольно шустро работает на 50 записей.
Цитата Сообщение от Tester64 Посмотреть сообщение
Угу!
тогда, как я писал выше:
Цитата Сообщение от V0v1k Посмотреть сообщение
для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
Добавлено через 3 минуты
в общем, списки всегда грузятся быстро неважно сколько айтемов, хоть миллион, и на создавать миллион view вам не хватит памяти и если у вас там где то большие задержки, то вы что-то делаете неправильно.
0
24.08.2013, 13:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 13:47
Привет! Вот еще темы с решениями:

Передать через intent ArrayList объектов своего класса
У меня есть ArrayList из обьектов моего класса. Мне нужно передать это через...

Пытаюсь передать данные через Intent, но выходит ошибка
Пытаюсь передать данные через Intent, но выходит ошибка, когда пытаюсь передать...

Как передать через intent нажатие кнопки в другом активити
В первом активити у нас есть две кнопки 1 и 2. Во втором активити ещё две...

Starting: Intent { act=android.intent.action.MAIN. и пустой белый экран
При запуске приложения всё заканчивается на Starting: Intent {...


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

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

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