С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678

Передать объект в другую активити и изменить его

25.06.2024, 10:12. Показов 558. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно передать объект в другую активити, там изменить этот объект, и после возвращения в первое активити работать с этим измененным объектом.
Я указал что объект Serializable. Передаю его во вторую активити, изменяю объект. Но после возвращения в первую активити поля объекта оказываются в том состоянии, как до передачи во вторую активити.
Как будто при вызове getSerializableExtra создается копия объекта.

Filter.java:
Java
1
2
3
4
5
6
7
public class Filter implements Serializable {
 
    public int test;
 
    public Filter() {
    }
}

Activity1.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Filter filter;
 
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.report);
 
     filter = new Filter();
}
 
 
public void runActivity2() {
    filter.test = 100; //присваиваю значение полю объекта
    Intent intent = new Intent(this, FilterActivity.class);
    intent.putExtra("filter", filter); //передаю объект в другое активити
    startActivity(intent);
}

Activity2.java:
Java
1
2
3
4
5
6
7
8
9
10
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filter);
 
        Bundle Extras = getIntent().getExtras();
        if (Extras != null) {
            filter = (Filter) getIntent().getSerializableExtra("filter"); //получаю объект во втором активити
            filter.test = 1; //присваиваю новое значение
        } 
}

P.S. Пробовал объявить класс не Serializable, а Parcelable.
Но результат тот-же.

Добавлено через 1 час 49 минут
Я поискал информацию.
Вроде как только через onActivityResult можно получить измененный объект в Activity1.
Правильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2024, 10:12
Ответы с готовыми решениями:

Передать переменную в другую активити с tab активити
Всем привет,вообщем тема такая,у меня есть tabactivity с фрагментами на одном из фрагментов есть переход на другое активити,так же в нем...

Как сохранить нарисованный объект и передать его в другую часть программы ?
Всем доброго времени суток !У меня есть код,который произвольно (так ,как захочется юзеру) рисует линии на холсте. Как можно сохранить...

Передать параметр из одной активити в другую
Всем привет, дорогие форумчане! Прошлый раз мне любезно помогли здесь, мне понравилось. Так что снова обращаюсь за помощью.:D Есть...

8
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
02.07.2024, 09:11
Цитата Сообщение от Slon747 Посмотреть сообщение
Вроде как только через onActivityResult можно получить измененный объект в Activity1.
Правильно?
Правильно. Но если вы воспользуетесь услугами синглтона Application то передавать ничего не надо даже будет
1
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
02.07.2024, 11:57  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Но если вы воспользуетесь услугами синглтона Application то передавать ничего не надо даже будет
Я этим пользуюсь, но не понял как в этом случае поможет.
Если я объявлю Filter filter там, то мне придется делать его static, что мне нельзя делать.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
02.07.2024, 13:15
Цитата Сообщение от Slon747 Посмотреть сообщение
но не понял как в этом случае поможет.
Да элементарно. Объект существует в синглтоне. Соовтетсвенно, все элементы созданные в контексте этого синглтона (т.е. если активити запущено без флага FLAG_ACTIVITY_NEW_TASK) будут иметь доступ к одному и тому же объекту, безо всякой передачи.
0
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
02.07.2024, 15:04  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Да элементарно. Объект существует в синглтоне. Соовтетсвенно, все элементы созданные в контексте этого синглтона (т.е. если активити запущено без флага FLAG_ACTIVITY_NEW_TASK) будут иметь доступ к одному и тому же объекту, безо всякой передачи.
А как сделать так, чтобы существовало несколько отдельных объектов, созданных на разных активити?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
02.07.2024, 15:58
Цитата Сообщение от Slon747 Посмотреть сообщение
А как сделать так, чтобы существовало несколько отдельных объектов, созданных на разных активити?
Map<Class<? extends Activity>,Object> например...
Ну или гоняйте туда-обратно через парсел
0
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
02.07.2024, 17:34  [ТС]
Azathtot,
Можно ли подробнее?
У мен отдельный файл для класса Filter
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class Filter implements Serializable {
 
..
..
..
    public Filter(Type type) {
        this.type = type;
        conditions = new ArrayList<>();
    }
..
..
..
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
02.07.2024, 18:18
Цитата Сообщение от Slon747 Посмотреть сообщение
У мен отдельный файл для класса Filter
Только лучше не Seializable а Parcelable
и получать через bundle.getParcelableExtra()
Так вот, полуили в onNewIntent()/onCreate() поработали, и в вызове setResult() во второй параметр (Intent) положили ризменный объект.
В первой активити, в onActivityResult восстановили его из полученного интента.
1
67 / 43 / 5
Регистрация: 24.08.2013
Сообщений: 678
02.07.2024, 20:26  [ТС]
Azathtot,
спасибо, буду пробовать.
Насчет Parcelable.
Сначала я так и сделал, прочитав что он в 16 раз быстрее Seializable.
Но у некоторых пользователей программа стала вылетать по ошибке "No virtual method writeBoolean".
Можно было заменить его на writeInt, но потом нарвался на проблему после добавления вложенного класса.
Плюнул и перешел на Seializable.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2024, 20:26
Помогаю со студенческими работами здесь

Как из одного активити строку передать в другую в виде listView
это первое активитиpublic class TodoActivity extends Activity implements View.OnClickListener { private EditText mTaskInput; ...

Выбор файла и переключение на другую активити для его открытия
Подскажите советом или кодом. Написал файловый менеджер для просмотра файлов на устройстве. Допустим это будет просмотрщик .txt файлов. Как...

Как с ListFragment передать имя файла чтобы открыть его в другом Активити?
Всем привет, я новичек! ломаю голову над такой задачей: Есть ListFragment со списком &quot;приборов&quot; мне надо при нажатии на нужный...

Переход из фрагмента одной активити в другую активити
Как реализовать нажатие на кнопку чтобы из фрагмента одной активити попасть в другую активити?

Передать объект из одной функции в другую
Вывести из функции переменную или свойство объекта вроде и несложно, например делал так: Function My { 'A'..'C'|% { $oPr =...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru