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

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

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

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

22.08.2013, 09:32. Просмотров 1600. Ответов 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] - Программирование 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 параметров разного типа (количество переменных все еще растет). Эти...

23
V0v1k
1159 / 983 / 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 / 43
Регистрация: 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
1159 / 983 / 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 / 43
Регистрация: 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
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 13:47 #20
Цитата Сообщение от Tester64 Посмотреть сообщение
Возможно, но надо и альтернативы пока не придумал. Нужно создать ЦВЕТНЫЕ списки, желательно как в дереве-проводника Win. Некоторые строки - иформационные (группы/папки, узкие, не нажимаемые) а другие - легко нажимаемые (широкие). Позднее планирую КАЖДУЮ строку раскрашивать управляемым цветом. Когда-то нашел пример MultipleItemsList (могу скинуть), где это красиво и довольно шустро работает на 50 записей.
Цитата Сообщение от Tester64 Посмотреть сообщение
Угу!
тогда, как я писал выше:
Цитата Сообщение от V0v1k Посмотреть сообщение
для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
Добавлено через 3 минуты
в общем, списки всегда грузятся быстро неважно сколько айтемов, хоть миллион, и на создавать миллион view вам не хватит памяти и если у вас там где то большие задержки, то вы что-то делаете неправильно.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 13:48  [ТС] #21
Цитата Сообщение от V0v1k Посмотреть сообщение
для использования разных лаяутов для айтемов в одном списке есть свой механизм с использование методов getViewTypeCount и getItemViewType
Возможно позднее переделаю, но не думаю что это СИЛЬНО ускорит первую загрузку и хоть как-нибудь повлияет на повторное использоваие адаптера... 5-10 секунд на первую загрузку в 100-300 записей один раз перед дальнейшим частым использованием - это не много.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 14:05 #22
у вас не должно при первом выводе загружать все айтемы, должны загружаться столько, сколько помещается на экране(10 например), а потом ListView их переиспользует
Цитата Сообщение от V0v1k Посмотреть сообщение
в общем, списки всегда грузятся быстро неважно сколько айтемов, хоть миллион, и на создавать миллион view вам не хватит памяти и если у вас там где то большие задержки, то вы что-то делаете неправильно.
Добавлено через 11 минут
вы в адаптере сохранили например такие view
R.layout.list_item_1
R.layout.list_item_2
R.layout.list_item_2
R.layout.list_item_2
R.layout.list_item_1
и дальше хотите использовать для новых данных, а что если новым данным нужно будет
R.layout.list_item_2
R.layout.list_item_1
R.layout.list_item_1
R.layout.list_item_1
R.layout.list_item_2
?

Добавлено через 2 минуты
если надумаете все делать по правилам, не забудьте еще про такую практику как ViewHolder Pattern
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2013, 14:13  [ТС] #23
Вобще-то у меня все по правилам! Просто сложная математика на отрисовку одной/каждой ячейки. 2-3 страницы кода на каждую ячейку. Оптимизировать надо именно отрисовку!
Попробовал использовать getViewTypeCount и getItemViewType - прирост не заметен. Может и есть, но милисекунды. ViewHolder я использовал с самого начала. Но буферизация реально ускоряет в сотни раз...

Добавлено через 1 минуту
Цитата Сообщение от V0v1k Посмотреть сообщение
и дальше хотите использовать для новых данных, а что если новым данным нужно будет
Либо обнулю буферизацию (отдельная простая процедура) и подожду еще один раз 10 секунд. Либо вставлю новые ячейки и список ОДИН раз задержится ТОЛЬКО на этих записях, т.к. только они не будут буферизированы...
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.08.2013, 14:41 #24
Цитата Сообщение от Tester64 Посмотреть сообщение
Вобще-то у меня все по правилам!
нет.
Цитата Сообщение от Tester64 Посмотреть сообщение
2-3 страницы кода на каждую ячейку
у вас 2-3 страницы вызовов setTex/setBackground?
с ViewHolder даже 2-3 страницы вызовов setTex/setBackground будут обрабатываться очень быстро, если по правильному все делать
если у вас столько полей много, то значит айтем большой, значит их на экране мало, значит все должно быстро грузится если делать все правильно
Цитата Сообщение от Tester64 Посмотреть сообщение
Попробовал использовать getViewTypeCount и getItemViewType - прирост не заметен. Может и есть, но милисекунды. ViewHolder я использовал с самого начала.
естественно, в вашем случае они ничего не дают, так как у вас все сделано не по правилам андроида.

Добавлено через 7 минут
Цитата Сообщение от Tester64 Посмотреть сообщение
Но буферизация реально ускоряет в сотни раз...
ListView и так буферизирует все что ему нужно, вы просто не умеете это использовать.

Добавлено через 4 минуты
Цитата Сообщение от Tester64 Посмотреть сообщение
2-3 страницы кода на каждую ячейку
ну так для новых данных вы все рано проганяете эти 2-3 страницы! а view и так буферизируются без вашего вмешательства и не все 300, а ровно столько, сколько нужно, вы явно делаете что-то не так.

Добавлено через 6 минут
Вывод:
ListView сам буферизирует View в том количестве которое ему нужно, ViewHolder ускоряет заполнение этих View, а задержки вызваны вашим же излишним кодом который создает 300 view сразу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 14:41
Привет! Вот еще темы с ответами:

Передать через 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 } ...


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

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

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