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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

22.08.2013, 09:32. Просмотров 1546. Ответов 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);
Как же тогда???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 09:32     Передать адаптер в Intent
Посмотрите здесь:

Передать через intent VIEW - Программирование Android
Как можно через intent передать "VIEW", полученное вот таким способом: View view = (View)findViewById(R.id.layout_linear); Передавая...

Передать через Intent информацию об Item - Программирование Android
Выводит ошибку и приложение закрывается by Force Close ошибка по ходу в Intente package kg.aykut.speak_kyrgyz; import...

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

Как передать intent данные в Service? - Программирование Android
Здравствуйте! как передать intent данные в класс с расширением Service? Стандартным способом кажется не получится передать через putextra...

Как передать ссылку через Intent - Программирование Android
Как можно в такой класс package app.kray.anddev; import java.io.IOException; import java.io.InputStream; import...

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

Пытаюсь передать данные через Intent, но выходит ошибка - Программирование Android
Пытаюсь передать данные через Intent, но выходит ошибка, когда пытаюсь передать число Вот, что выводит в Логе 03-02...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 11:30     Передать адаптер в Intent #2
правильнее создавать адаптер в activity_TreeList
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.08.2013, 12:37  [ТС]     Передать адаптер в Intent #3
Если я правильно понял, адаптер можно создать только один раз. Типа "буферизировать". Есть несколько (около 10, но может быть больше) списков на несколько сотен строк. Заполнять их каждый раз долго. Внешний вид один для всех списков. Хочу пробуферизировать записи (заполнить адаптер) при старте программы или только один раз при первом открытии. А дальше при "переоткрытии" просто использовать готовые списки.

Раньше использовал AlertDialog со списком, но это долго и не красиво(сейчас строки цветные и со смещением как в дереве). Хочу заменить его на свой вариант. Причем универсальный для всех списков.
Как передать УЖЕ созданный адаптер в активити ДО создания? Что-бы в OnCreate активит смог его положить в lvMain.setAdapter(out_treeAdapter);

Добавлено через 9 минут
p.s. Я еще плохо понимаю яву... В делфи был тип значения Pointer - ссылка на ЛЮБОЙ обьект в памяти - строку, число, класс. В другом юните можно создать глобальную переменную, доступную из любого класса. Можно создать таблицу(array)/список(list) "адаптеров" и передать в форму/активити только его номер в таблице для отображения.
Можно ли и как подобное создать в яве?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 21:03     Передать адаптер в Intent #4
ничего не понял.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
23.08.2013, 23:20  [ТС]     Передать адаптер в Intent #5
хух.... Попробую еще раз обьяснить.

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

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

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

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

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

Добавлено через 1 час 14 минут
Хочу использовать для разных полей одно активити и РАЗНЫЕ адаптеры (одного типа но по разному заполненые)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 23:47     Передать адаптер в Intent #6
не понимаю в чем проблема.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 00:34  [ТС]     Передать адаптер в Intent #7
2V0v1k
Тогда перечитайте название темы и вопрос!!!
My_adapter atl_1 = new My_adapter(this); intent.putExtra("adapter", atl_1); Выдает ошибку!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 00:52     Передать адаптер в Intent #8
не вижу причин передавать адаптер.

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

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

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

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

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

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

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

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

Добавлено через 1 минуту
и если вы используете в нескольких местах одни и те же данные, достаточно передать List<T>
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:00  [ТС]     Передать адаптер в Intent #13
Данные ВСЕГДА разные. Иначе не игрался бы с этим. Каждая строка заполняет много чего в getView. Кода в getView страницы на2-3. Для каждо строки задаются свой стиль, 3-4 надписи, видимость около 10 картинок, цвет фона для надписей, наличие рисованой галочки на выделеном элементе, древовидное смещение, разные обработи клика. Сейчас работаю над мультитатчевым зумом текста на строках и способностью сворачивать/скрывать подчиненные блоки как в дереве...

Но после одноразовой отрисовки в адаптере сохраняется куча буферизированой информации и повторное использование этого адаптера ускоряет открытие от 10 секунд до милисекунд... setDatа не помогает - у мея свой механизм заполнения в котором 6-7 параметров..

Через intent.putExtra("adapter", "1"); передаю номер используемого адаптера.

...смейтесь дальше! (Вежливее надо быть! Тем более если Вы - модератор)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:03     Передать адаптер в Intent #14
вы в getView буферизируете какие-то данные в адаптер?

Добавлено через 1 минуту
вы в адаптере добавили List<View> и в него добавляете все что создает getView что ли?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:07  [ТС]     Передать адаптер в Intent #15
Конечно! В момент вызова getView вызывается convertView = Inflater.inflate(R.layout.list_item_1, null); Причем разная для каждой строки. Процесс медлительный поэтому что-бы не вызывать ее для уже соданных convertView записывается рядом с данными в таблицу.
Более продвинутый/доработаный метод из http://startandroid.ru/ru/uroki/vse-...j-adapter.html
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:12     Передать адаптер в Intent #16
ничего записывать не нужно, просто добавьте проверку convertView на null
Java
1
2
3
 if (convertView == null) {
      convertView = lInflater.inflate(R.layout.item, parent, false);
    }
ListView сам все сохраняет и использует не больше чем ему нужно для вывода на экран.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:24  [ТС]     Передать адаптер в Intent #17
Я пробовал так (в ссылке это есть), но были сбои.. кажется с размерами строк или с их заполнением... менял нагло их местами и номерация шла с первой видимой. В результате при быстром листании получал 5-6 номеров 1

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

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

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

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

Цитата Сообщение от V0v1k Посмотреть сообщение
я так понимаю вы для разных позиций создаете view с разных лаяутов(R.layout.list_item_1/R.layout.list_item_2/...)?
Угу!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 13:47     Передать адаптер в Intent
Еще ссылки по теме:

Как передать через intent нажатие кнопки в другом активити - Программирование Android
В первом активити у нас есть две кнопки 1 и 2. Во втором активити ещё две кнопки 3 и 4. Вопрос в том, как сделать так, чтоб при нажатии...

Получить JSON и передать все его параметры его в Intent. Использован автофильтр - Программирование Android
Всем привет. Я тут запутался, помогите разобраться. Стоит задача выполнить такой функционал: получить данные JSON, один из параметров...

Intent - Программирование Android
Доброе утро. Помогите с одним вопросом. Как из модального окна, когда нажимаешь на кнопку &quot;Ок&quot;, сделать так чтобы при переходе на...

Intent история переходов - Программирование Android
есть две Activity - ActivityMain и glmenu В glmenu нажимаю на кнопку и интентом перекидываюсь на ActivityMain а далее для нормальной...

Intent внутри Layout - Программирование Android
Хочу вывести браузер с кнопки не на весь экран, а в конкретный слой примерно то что надо нашел по этой ссылке ...


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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:47     Передать адаптер в Intent #20
Цитата Сообщение от Tester64 Посмотреть сообщение
Возможно, но надо и альтернативы пока не придумал. Нужно создать ЦВЕТНЫЕ списки, желательно как в дереве-проводника Win. Некоторые строки - иформационные (группы/папки, узкие, не нажимаемые) а другие - легко нажимаемые (широкие). Позднее планирую КАЖДУЮ строку раскрашивать управляемым цветом. Когда-то нашел пример MultipleItemsList (могу скинуть), где это красиво и довольно шустро работает на 50 записей.
Цитата Сообщение от Tester64 Посмотреть сообщение
Угу!
тогда, как я писал выше:
Цитата Сообщение от V0v1k Посмотреть сообщение
для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
Добавлено через 3 минуты
в общем, списки всегда грузятся быстро неважно сколько айтемов, хоть миллион, и на создавать миллион view вам не хватит памяти и если у вас там где то большие задержки, то вы что-то делаете неправильно.
Yandex
Объявления
24.08.2013, 13:47     Передать адаптер в Intent
Ответ Создать тему
Опции темы

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