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

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

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

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

22.08.2013, 09:32. Просмотров 1578. Ответов 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 (Программирование Android):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 11:30 #2
правильнее создавать адаптер в activity_TreeList
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.08.2013, 12:37  [ТС] #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 #4
ничего не понял.
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
23.08.2013, 23:20  [ТС] #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 #6
не понимаю в чем проблема.
Tester64
396 / 357 / 43
Регистрация: 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); Выдает ошибку!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 00:52 #8
не вижу причин передавать адаптер.

Добавлено через 5 минут
если нужно те же самые данные показывать в нескольких местах, то передавайте данные а не адаптер.
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 05:55  [ТС] #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 #10
где вы такого начитались?

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

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

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

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

Добавлено через 1 минуту
и если вы используете в нескольких местах одни и те же данные, достаточно передать List<T>
Tester64
396 / 357 / 43
Регистрация: 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"); передаю номер используемого адаптера.

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

Добавлено через 1 минуту
вы в адаптере добавили List<View> и в него добавляете все что создает getView что ли?
Tester64
396 / 357 / 43
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 13:07
Привет! Вот еще темы с ответами:

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

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

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

Starting: Intent { act=android.intent.action.MAIN. и пустой белый экран - Программирование Android
При запуске приложения всё заканчивается на Starting: Intent { act=android.intent.action.MAIN cat= cmp=com.example.lab2/.MainActivity } ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.08.2013, 13:07
Ответ Создать тему
Опции темы

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