|
0 / 0 / 0
Регистрация: 20.02.2017
Сообщений: 2
|
|
Передача значений между активностями20.02.2017, 17:24. Показов 3036. Ответов 34
Добрый день. Как можно передавать значения переменных между активностями? У меня задача такая: имею четыре активности, одна это заголовок, вторая и третья имеют по два радиобаттона , нажатия на которых прибавляют значения к переменым(а и b). А на четвертой выводятся переменные(a,b), и их значения(то есть сколько нажали первый радиобаттон и сколько нажали второй).
0
|
|
| 20.02.2017, 17:24 | |
|
Ответы с готовыми решениями:
34
Передача данных между активностями Переход между активностями! Затруднение с переключением между активностями |
|
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
|
|
| 21.02.2017, 15:48 | |
|
Снова споры о высших материях, смысл того, что вместе с extra я предложил sharedPref просто потому, что для ТС разницы никакой, а вот ошибку при нажатии назад на какой-нибудь 3-4й активити словит точно.
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 21.02.2017, 16:45 | |
|
ExFau$t, позвольте с вами не согласиться, коллега) статика хотя бы дает проверку имени и типа, а засовывание в sharedPref кроме гемороя с самим засовыванием/высовыванием дает возможность налететь на лишнюю букву в имени записанном в виде строки или несоответствие содержимого. в sharedPref надо класть если нужно обеспечить сохраняемость между запусками. в остальных случаях это ад адский, но вы его предлагали как один из вариантов костылей, поэтому претензий не имею, да, логически - это один из вариантов.
Добавлено через 2 минуты ..хотя может быть я просто не знаю молниеносных и безопасных способов трансформации произвольного объекта в экстру или не сильно от нее в плане разработки отличающийся преф
0
|
|
|
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
|
|
| 21.02.2017, 16:54 | |
|
vxg, не пользуюсь статиками, вот и не предлагаю, коллега). Да ошибка в имени переменной может случиться с такой же вероятностью, как и полях SharedPref. Хотя, действительно, это тоже один из вариантов.
Добавлено через 4 минуты Ну не знаю, на вкус и цвет.. Но лично мне SharedPref очень нравится не только в плане хранения каких-то настроек, но ещё как мини-бд, в некоторых случаях даже логгер, невероятно удобная штука.
1
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|||||||||||
| 21.02.2017, 16:55 | |||||||||||
|
я уже раз 5 точно писал что практически что угодно можно передавать как строку
кладем
2
|
|||||||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 21.02.2017, 17:21 | |
|
Паблито, у меня это до сих пор перед глазами - это реально мощно хоть я ни разу и не делал так, но все равно остаётся проблема ошибки в имени и типе. Да и просто стремно туда сюда переливать то что уже у тебя есть
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 22.02.2017, 10:25 | |
|
Паблито, может быть проблема при декодировании сложных типов. Также при преобразовании вещественных в целые, в этом случае приходится писать обработчики.
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 22.02.2017, 11:34 | |
|
пример класса в студию, а я покажу как это сделать
и я повторю очевидное - если возникает необходимость передавать сложные структуры (объекты) между активностями, значит что-то хромает в архитектуре активити, по идее, это малосвязанные или вообще не связанные между собой компоненты
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|||
| 22.02.2017, 11:47 | |||
|
Кроме того, хотел сказать, что SharedPreferences не есть противник Intent, их можно использовать одновременно как раз для случая выхода из программы или неожиданного перехода с активности 3 на активность 2.
0
|
|||
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
|
| 22.02.2017, 15:59 | |
|
Раз холивар, то выскажу свое ИМХО.
ExFau$t, есть отличная либа Hawk для упрощения работы с запись\восстановлением объектов в SharedPreferences. Юзается в паре проектов, отлично себя показывает. Может вам пригодится. Но я все же придерживаюсь мнения, что для передачи объектов между View SharedPreferences излишни. vxg, чтоб избежать ошибки в имени и типе, создание bundle должно происходить там, где он используется. И объекту можно дать интерфейс Serializable и без проблем передавать через Intent. По поводу потери типа или ключа: только View должна знать какие ей параметры нужны. Поэтому создание intent+bundle, fragment+bundle, view+bundle должно происходить в самой View в статик методе. Пример этому то, как AS создает getInstance для фрагментов. И использование констант вместо magic string|numbers. Тогда всегда видно какой тип передан и какой ключ. И не приходится искать по всем другим классам, где же был создан этот bundle. CoolMind, согласен с Паблито, если между View передаются сложные объекты - это не правильно. Должны передаваться идентификаторы, а сами объекты должна хранится в каком нибудь хранилище (просто в кеше, в SharedPreferences, DB, etc). И по идентификатору извлекаться из него. Соответственно они там будут в единичном экземпляре и всегда актуальны, если правильно все сделано.
0
|
|
|
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
|
|
| 22.02.2017, 16:26 | |
|
demixdn, у меня нет проблем с SharedPref, спасибо за заботу. Я не передаю объекты "между View". Да и связывать активити редко приходится, просто нет в этом необходимости.
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 22.02.2017, 16:35 | |
|
demixdn, бинго - они должны хранится в хранилище и извлекаться по идентификатору - просто представьте статик объект в виде умного хранилища)
0
|
|
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
|
| 22.02.2017, 17:12 | |
|
vxg, не обязательно он статик. это зависит от подхода. да, скорей всего он будет существать в одном экземпляре. Может это будет синглетон, а может его кто-то будет инжектить с помощью DI. И совсем не обязательно что это хранилище для всего. Всегда можно что-то декомпозировать и разбить на более мелкие независимые части.
И уровень хранения тоже вполне зависит от задач. Либо этот кеш есть в презентере, либо он есть в репозитории, либо просто класс MemoryCache для своих репозитариев, либо вообще отдать на откуп какой-нибудь либе типа Store (но еще не находилось случая, чтоб пришлось использовать столь наворочанную либу).
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
||
| 26.02.2017, 19:48 | ||
|
Во-вторых, при пересоздании активности (фрагмента) надо уметь восстанавливать данные, которые хранятся в Bundle. Опять пойдём в SP?
0
|
||
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
|
| 27.02.2017, 14:01 | |
|
CoolMind, bundle используется только для передачи идентификатора или пути на что-то (файл, url). Объекты хранить в другом хранилище, отвязанном от жизненного цикла activity|fragment.
Пересоздание - это вообще отдельная тема. Все хорошо, если у вас поток один и у вас все поля инициализируются и заполняются в onCreate, что что если какие то данные асинхронные и прилетают после onResume. После переворота старые данные в onCreate в полях записались, после в onRestoreInstanceState перезаписались на новые (но не сохраненные). Но исходный bundle содержит старые данные. И в соответствии с ними какой нибудь поток вернет данные и перезапишет их снова, поверх измененных. И поэтому приходится выкручиваться, записывать руками в Bundle savedInstanceState свои данные, чтоб уже в оnCreate у нас были актуальные данные. Да, случай частный. Но я часто видел, что некоторые данные в поля пишутся в onResume, что опять же ставит ту же проблему, руками прописывать свой bundle. Вот это все нужно держать в голове и помнить о таких моментах. Вместо того чтоб юзать идентификаторы и в onPause вызывать функцию saveMyObject. В любом случае, мне так удобней. Если вам удобней в bundle все совать, ну ладно. Главное, чтоб все работало и тестировалось.
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
||
| 27.02.2017, 16:17 | ||
|
demixdn, возможно, мы друг друга не так поняли. Я в целом с вами согласен, всё это очень интересно, но имел в виду, что я передаю в Bundle сложный класс, состоящий из множества других классов, может быть. Он Serializable, не содержит внутри себя Bitmap, файлов или каких-то затратных по памяти объектов. Просто сам по себе сложный. В этом случае SP тоже не выручает, если мы передаём данные через JSON. Т.е. по сути, JSON с классом что в Bundle, что в SharedPreferences одинаков.
Выше Паблито писал про intent.putExtra, new Gson().fromJson(intent.getStringExtra. Это же самое я могу сделать и в SharedPreferences. Возможно, вас смутила фраза:
0
|
||
| 27.02.2017, 16:17 | |
|
Кто как передаёт коллекции между активностями, классами? MediaPlayer, рывок перезапуска музыки при переходе между активностями Передача значений между Activity Передача значений между классами Передача объектов между активностями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|