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

Доступ к элементам управления одной активности через другую - Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
23.04.2015, 22:37     Доступ к элементам управления одной активности через другую #1
Имеется две активности. Когда запускаю вторую активность, первую не выгружаю (не удаляю).
Можно ли сделать так, чтобы вторая активность имела доступ к элементам управления первой активности?
Я пробовал, например так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class SecondActivity extends Activity
{
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);      
 
        setContentView(R.layout.activity_second);
 
        CheckBox MyCheckBoxInFirstActivity = (CheckBox)findViewById(R.id.checkBoxInFirstActivity);
 
        MyCheckBoxInFirstActivity.setVisibility(View.GONE); // на этой строчке программа вылетает с ошибкой
 
    }     
  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2015, 22:37     Доступ к элементам управления одной активности через другую
Посмотрите здесь:

Доступ в БД через авторизационный сервер Android
Android Перевод из одной системы счисления в другую
Как толкнуть одной фигурой другую в методе onDraw Android
Передача данных из одной активности в третью Android
Android Сохранение состояния активности
Android Передать параметр из одной активити в другую
Портирование с одной версии на другую Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 414
23.04.2015, 23:01     Доступ к элементам управления одной активности через другую #2
Потому как MyCheckBoxInFirstActivity=null
Откуда желание изменять первую активность из второй? Почему бы не обновить элементы в onResume()?
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 13:07  [ТС]     Доступ к элементам управления одной активности через другую #3
Slon747, Вторая активность - окно с настройками. Настроек очень много, передавать туда-сюда данные через интенты (например) не хочется.
Цитата Сообщение от Slon747 Посмотреть сообщение
Почему бы не обновить элементы в onResume()?
Да, можно, наверное.. Я уже думал насчет onActivityResult, например.
Я не пойму как получить доступ к данным первой активити из второй, чтобы не создавать копии этих данных?
Я только-только перешел с c++ на java, и отсутствие указателей и глобальных объектов меня немного тормозит.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.04.2015, 15:21     Доступ к элементам управления одной активности через другую #4
znseday, пишите настройки сразу в sharedPreferencess и никаких проблем.
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,067
24.04.2015, 16:18     Доступ к элементам управления одной активности через другую #5
Этож ищется в текущей активности, конечно null будет если checkBoxInFirstActivity отсутствует на R.layout.activity_second
Цитата Сообщение от znseday Посмотреть сообщение
CheckBox MyCheckBoxInFirstActivity = (CheckBox)findViewById(R.id.checkBoxInFirstActivity);
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 16:37  [ТС]     Доступ к элементам управления одной активности через другую #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
пишите настройки сразу в sharedPreferencess и никаких проблем
У меня есть главная активность, и в ней есть переменная типа sharedPreferencess. В этой же активности я сохраняю и загружаю настройки. А как передать sharedPreferencess второй активности, чтобы она изменила настройки?

т.е. теоретически, я могу во второй активности сохранить настройки в файл, а затем опять его прочитать в первой активности. Но должен же быть способ проще и быстрее?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,067
24.04.2015, 17:21     Доступ к элементам управления одной активности через другую #7
sharedPreferencess можешь хоть откуда читать, а если не обязательно сохранять данные м/у запусками приложения, то можно использовать static переменную.
Mikalai
248 / 224 / 91
Регистрация: 11.01.2015
Сообщений: 643
24.04.2015, 17:45     Доступ к элементам управления одной активности через другую #8
znseday, проще некуда
В одной активити сохраняешь:
Java
1
2
SharedPreferences sp = getPreferences(MODE_PRIVATE);
sp.edit().putString("myStringKey", "Моя строка").putInt("myIntKey", 33).commit();
В любой другой активити этого приложения достаёшь :

Java
1
2
3
SharedPreferences sp = getPreferences(MODE_PRIVATE);
String str = sp.getString("myStringKey", "Строка по умолчанию");
int i = sp.getInt("myIntKey", 0);
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 17:56  [ТС]     Доступ к элементам управления одной активности через другую #9
Mikalai, разве
Java
1
sp.edit().putString("myStringKey", "Моя строка").putInt("myIntKey", 33).commit();
не записывает данные в файл? Просто это как-то странно получается обмениваться данными через файл...
Mikalai
248 / 224 / 91
Регистрация: 11.01.2015
Сообщений: 643
24.04.2015, 18:05     Доступ к элементам управления одной активности через другую #10
Как тут уже писали можешь сделать статик переменную или вызывать активити через интент, правда тогда откроется новое активити( Android - Передача данных с одного Activity на другое Activity )
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 18:18  [ТС]     Доступ к элементам управления одной активности через другую #11
Про интенты знаю, спасибо, но как-то муторно. Тем более, что мне желательно не простые типы данных передавать, а объекты. Попробую через статик.
Паблито
резкий
1890 / 1624 / 504
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
24.04.2015, 19:27     Доступ к элементам управления одной активности через другую #12
Тут просто нужно для себя понять такую штуку - активити, это отдельные логические "куски" в архитектуре программы, их желательно делать максимально независимыми друг от друга.

Если первая активити подготовила для второй какие-то данные то их можно передавать либо через статические поля, либо через intent.putExtras.
В соседних темах я немного поспорил со знающими людьми на тему статик полей, подумал и теперь придерживаюсь того же мнения что и они - статик поля не самый надежный метод передачи, могут быть нюансы.

На вопрос "а как доступиться к даным, которые в первой активити?" можно ответить так - надо выстроить логику программы так что бы не возникало желания куда-то лезть за этими данными Они должны быть подготовлены и переданы через intent.putExtras()
Это чисто имхо.
http://developer.android.com/guide/faq/framework.html#3
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 20:01  [ТС]     Доступ к элементам управления одной активности через другую #13
Паблито, а что вы думаете насчет Singleton class?
Паблито
резкий
1890 / 1624 / 504
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
24.04.2015, 20:07     Доступ к элементам управления одной активности через другую #14
так активити и есть синглтоны по идее
пусть меня поправят если ошибаюсь
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
24.04.2015, 20:15  [ТС]     Доступ к элементам управления одной активности через другую #15
если активити это синглинтон, то почему доступ к полям активити может быть только через статик? Что-то я совсем запутался....
Mikalai
248 / 224 / 91
Регистрация: 11.01.2015
Сообщений: 643
24.04.2015, 20:15     Доступ к элементам управления одной активности через другую #16
Паблито, вроде как нет. Ты можешь открыть активити А, из него открыть активити В, из него сново открыть активити А. В итоге, если ты не закрывал старые активити, одно активити А будет в бекстеке, другое в фокусе. Вроде так.
Паблито
резкий
1890 / 1624 / 504
Регистрация: 12.05.2014
Сообщений: 5,849
Завершенные тесты: 1
24.04.2015, 20:42     Доступ к элементам управления одной активности через другую #17
я не говорил что только через статик, наоборот, я писал что все-таки лучше пользоваться интентами
там делов-то 2-3 строчки что бы запаковать данные и еще 2 что бы достать в другой активити

Добавлено через 24 минуты
допустим у нас есть две активити - MyActivity и SecondActivity
что-бы передать данные из первой во вторую создаем простой класс, назовем его A
Java
1
2
3
4
class A implements Serializable {
    int anInt;
    ArrayList<String> list;
}
поля взяты для примера, типа передаем число и список строк

1. упаковываем все, что нужно передать
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        ArrayList<String> list = new ArrayList<>();
        list.add("строка 1");
        list.add("еще строка");
 
        A a = new A();
        a.anInt = 42;
        a.list = list;
 
        Intent intent = new Intent(this, MySecondActivity.class);
        intent.putExtra("ourData", a);
        startActivity(intent);
    }
}


2. достаем во второй активити наши данные
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
public class MySecondActivity extends Activity {
 
    @Override
    protected void onResume() {
        super.onResume();
        A a = (A) getIntent().getSerializableExtra("ourData");
        Log.i("===", a.list.get(0));
    }
}
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
25.04.2015, 01:19  [ТС]     Доступ к элементам управления одной активности через другую #18
Паблито, спасибо за пример. Хм... не помню где, но читал, что вроде через интенты можно передавать только простые типы данных. Выходит, что я могу передавать целые сложные объекты (например, "а" типа "А" в данном примере)?
В данном примере создается копия данных, или работа идет с первоначальным объектом "а" из первой активити?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
25.04.2015, 13:25     Доступ к элементам управления одной активности через другую #19
Цитата Сообщение от znseday Посмотреть сообщение
Выходит, что я могу передавать целые сложные объекты
Да можно, только класс, который вы передаете должен реализовывать интерфейс Serializable.
Цитата Сообщение от znseday Посмотреть сообщение
В данном примере создается копия данных, или работа идет с первоначальным объектом
Передается копия.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2015, 14:03     Доступ к элементам управления одной активности через другую
Еще ссылки по теме:

Доступ к элементам Activity из другого класса Android
Android Полный доступ к android в выключенном состоянии через PC?
Android Передать параметр из одной в другую
Данные не передаются из одной активности в другую Android
Android Отслеживание активности

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

Или воспользуйтесь поиском по форуму:
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 445
25.04.2015, 14:03  [ТС]     Доступ к элементам управления одной активности через другую #20
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Передается копия.
Ясно.
Spelcrawler, а можно как-то передавать что-то типа указателя (как в c++)?

Паблито, в той вашей ссылке на документацию меня совсем добила фраза:
Even while an application appears to continue running, the system may choose to kill its process and restart it later.
Получается, что если, например, в моем приложении в главной активности есть переменная
Java
1
int a;
и во время работы с программой пользователь переключится на другую (например, смс, браузер и т.п.), то после возвращения в мою программу значение переменной "a" может уже стереться не смотря на то, что процесс моей программы все это время висел в ОЗУ?
Yandex
Объявления
25.04.2015, 14:03     Доступ к элементам управления одной активности через другую
Ответ Создать тему
Опции темы

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