Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
1

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

23.04.2015, 22:37. Показов 4697. Ответов 41
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется две активности. Когда запускаю вторую активность, первую не выгружаю (не удаляю).
Можно ли сделать так, чтобы вторая активность имела доступ к элементам управления первой активности?
Я пробовал, например так:
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); // на этой строчке программа вылетает с ошибкой
 
    }     
  
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2015, 22:37
Ответы с готовыми решениями:

Данные не передаются из одной активности в другую
Данные не передаются в другую активность... Вот код: Из: Intent inttt = new Intent(hhhhh.this,...

Доступ к элементам, элемента управления Список
Подскажите, как обратится и получить значения всех элементов , элемента управления Список(ListBox)...

разрешить/запретить доступ к элементам управления (.Enable)
Здравствуйте. Есть форма Железная дорога. Мне нужно чтобы при запуске формы все поля формы (включая...

Доступ к элементам управления другого приложения. Часть 2
Здраствуйте! Управляю программой на Delphi, не могу понять одну вещь. На форме приложения есть...

41
63 / 41 / 3
Регистрация: 24.08.2013
Сообщений: 620
23.04.2015, 23:01 2
Потому как MyCheckBoxInFirstActivity=null
Откуда желание изменять первую активность из второй? Почему бы не обновить элементы в onResume()?
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 13:07  [ТС] 3
Slon747, Вторая активность - окно с настройками. Настроек очень много, передавать туда-сюда данные через интенты (например) не хочется.
Цитата Сообщение от Slon747 Посмотреть сообщение
Почему бы не обновить элементы в onResume()?
Да, можно, наверное.. Я уже думал насчет onActivityResult, например.
Я не пойму как получить доступ к данным первой активити из второй, чтобы не создавать копии этих данных?
Я только-только перешел с c++ на java, и отсутствие указателей и глобальных объектов меня немного тормозит.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
24.04.2015, 15:21 4
znseday, пишите настройки сразу в sharedPreferencess и никаких проблем.
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
24.04.2015, 16:18 5
Этож ищется в текущей активности, конечно null будет если checkBoxInFirstActivity отсутствует на R.layout.activity_second
Цитата Сообщение от znseday Посмотреть сообщение
CheckBox MyCheckBoxInFirstActivity = (CheckBox)findViewById(R.id.checkBoxInFirstActivity);
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 16:37  [ТС] 6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
пишите настройки сразу в sharedPreferencess и никаких проблем
У меня есть главная активность, и в ней есть переменная типа sharedPreferencess. В этой же активности я сохраняю и загружаю настройки. А как передать sharedPreferencess второй активности, чтобы она изменила настройки?

т.е. теоретически, я могу во второй активности сохранить настройки в файл, а затем опять его прочитать в первой активности. Но должен же быть способ проще и быстрее?
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
24.04.2015, 17:21 7
sharedPreferencess можешь хоть откуда читать, а если не обязательно сохранять данные м/у запусками приложения, то можно использовать static переменную.
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
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);
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 17:56  [ТС] 9
Mikalai, разве
Java
1
sp.edit().putString("myStringKey", "Моя строка").putInt("myIntKey", 33).commit();
не записывает данные в файл? Просто это как-то странно получается обмениваться данными через файл...
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
24.04.2015, 18:05 10
Как тут уже писали можешь сделать статик переменную или вызывать активити через интент, правда тогда откроется новое активити( Android - Передача данных с одного Activity на другое Activity )
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 18:18  [ТС] 11
Про интенты знаю, спасибо, но как-то муторно. Тем более, что мне желательно не простые типы данных передавать, а объекты. Попробую через статик.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.04.2015, 19:27 12
Тут просто нужно для себя понять такую штуку - активити, это отдельные логические "куски" в архитектуре программы, их желательно делать максимально независимыми друг от друга.

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

На вопрос "а как доступиться к даным, которые в первой активити?" можно ответить так - надо выстроить логику программы так что бы не возникало желания куда-то лезть за этими данными Они должны быть подготовлены и переданы через intent.putExtras()
Это чисто имхо.
http://developer.android.com/g... ork.html#3
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 20:01  [ТС] 13
Паблито, а что вы думаете насчет Singleton class?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.04.2015, 20:07 14
так активити и есть синглтоны по идее
пусть меня поправят если ошибаюсь
0
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
24.04.2015, 20:15  [ТС] 15
если активити это синглинтон, то почему доступ к полям активити может быть только через статик? Что-то я совсем запутался....
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
24.04.2015, 20:15 16
Паблито, вроде как нет. Ты можешь открыть активити А, из него открыть активити В, из него сново открыть активити А. В итоге, если ты не закрывал старые активити, одно активити А будет в бекстеке, другое в фокусе. Вроде так.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
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));
    }
}
1
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
25.04.2015, 01:19  [ТС] 18
Паблито, спасибо за пример. Хм... не помню где, но читал, что вроде через интенты можно передавать только простые типы данных. Выходит, что я могу передавать целые сложные объекты (например, "а" типа "А" в данном примере)?
В данном примере создается копия данных, или работа идет с первоначальным объектом "а" из первой активити?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
25.04.2015, 13:25 19
Цитата Сообщение от znseday Посмотреть сообщение
Выходит, что я могу передавать целые сложные объекты
Да можно, только класс, который вы передаете должен реализовывать интерфейс Serializable.
Цитата Сообщение от znseday Посмотреть сообщение
В данном примере создается копия данных, или работа идет с первоначальным объектом
Передается копия.
1
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 570
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" может уже стереться не смотря на то, что процесс моей программы все это время висел в ОЗУ?
0
25.04.2015, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2015, 14:03
Помогаю со студенческими работами здесь

Доступ к элементам управления (DGW, ListBox) из потоков
Под элементами управления имею в виду datgaridview, listbox и т.д. В общем подскажите в какую...

Как получить доступ к элементам управления другой формы
как можно получит значение элементов первой формы если в проекте 2 формы Form1 f = new Form1();...

Доступ к элементам одной формы из другой
Господа! надо из одной формы менять свойства, например, кнопки, находящейся на другой форме! как в...

Доступ из одной формы к элементам другой
Всем Привет. Я создал главную форму Form1. И вот так создал дочернюю форму Form2 ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru