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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
#1

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

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

Имеется две активности. Когда запускаю вторую активность, первую не выгружаю (не удаляю).
Можно ли сделать так, чтобы вторая активность имела доступ к элементам управления первой активности?
Я пробовал, например так:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2015, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к элементам управления одной активности через другую (Программирование Android):

Данные не передаются из одной активности в другую - Программирование Android
Данные не передаются в другую активность... Вот код: Из: Intent inttt = new Intent(hhhhh.this, list.class); inttt.putExtra("vgh",...

Передача данных из одной активности в третью - Программирование Android
Есть главное активити. Оно вызывает второе, второе самоудаляется vtnjljv finish() и вызывает третье. В третьем надо передать данные...

Изменение настроек приложения из активности в рамках активности - Программирование Android
Друзья, помогите разобраться! имею наработки приложения-рисовалки, там есть у меня там активити (mainactivity) настроек, оттуда...

Доступ к элементам Activity из другого класса - Программирование Android
Есть Activity, в её классе создаю экземпляр другого класса twoclass tw = new twoclass(); tw.start(MainActivity.this); и запускаю ...

Доступ к элементам вью во время создания Activity - Программирование Android
Есть Activity. На ней textView. Мне нужно поставить этот textView в определенное место в зависимости от размера экрана. Хочу вызывать...

Передать параметр из одной в другую - Программирование Android
Добрый вечер. Тут небольшая проблема. Как передать (ID) - С одной AppCompatActivity в Fragment. Ну принцип такой же как на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
24.04.2015, 20:15 #16
Паблито, вроде как нет. Ты можешь открыть активити А, из него открыть активити В, из него сново открыть активити А. В итоге, если ты не закрывал старые активити, одно активити А будет в бекстеке, другое в фокусе. Вроде так.
0
Pablito
2492 / 1937 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 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));
    }
}
1
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
25.04.2015, 01:19  [ТС] #18
Паблито, спасибо за пример. Хм... не помню где, но читал, что вроде через интенты можно передавать только простые типы данных. Выходит, что я могу передавать целые сложные объекты (например, "а" типа "А" в данном примере)?
В данном примере создается копия данных, или работа идет с первоначальным объектом "а" из первой активити?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
25.04.2015, 13:25 #19
Цитата Сообщение от znseday Посмотреть сообщение
Выходит, что я могу передавать целые сложные объекты
Да можно, только класс, который вы передаете должен реализовывать интерфейс Serializable.
Цитата Сообщение от znseday Посмотреть сообщение
В данном примере создается копия данных, или работа идет с первоначальным объектом
Передается копия.
1
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
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
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
28.04.2015, 14:44  [ТС] #21
Люди, а подскажите еще, пожалуйста. Вот я передал во вторую активность кучу данных через интент. Вторая активность их видоизменила. Как мне обратно вернуть эту кучу данных в основную активность? (например, когда пользователь нажмет кнопку со стрелочкой "назад")
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
28.04.2015, 14:54 #22
Вообще надо понимать для чего эта "куча данных", от этого и плясать. Вернуть можно сто и одним способом.
0
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
28.04.2015, 15:02  [ТС] #23
Rube, Например? (Если не через файл)
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
28.04.2015, 15:30 #24
Через класс.
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
28.04.2015, 15:45 #25
Цитата Сообщение от Rube Посмотреть сообщение
Через класс.
Это же опять ерунда получится) Зачем тогда передавать из первой во вторую через интент, если обратно передавать костылем?)
znseday, из первой активити вторую нужно запускать методом startActivityForResult. Во второй активити в методе onBackPressed перед super.onBackPressed(или еще где, что вызывается перед закрытием второй активити) нужно создать новый интент, поместить в него все данные и вызвать метод setResult с новым интентом. Потом в первой активити переопределить метод onActivityResult в этот метод придет интент из второй активити.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
28.04.2015, 15:58 #26
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Это же опять ерунда получится)
Ну ТС наверное дотумкается что и первый раз передавать через класс нужно.
Цитата Сообщение от Spelcrawler Посмотреть сообщение
нужно создать новый интент, поместить в него все данные
А ему же объекты надо туда сюда передавать.
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
28.04.2015, 16:00 #27
Цитата Сообщение от Rube Посмотреть сообщение
А ему же объекты надо туда сюда передавать.
А в чем проблема? В интент можно все что угодно запихнуть. К тому же у ТСа уже получилось:
Цитата Сообщение от znseday Посмотреть сообщение
Вот я передал во вторую активность кучу данных через интент
0
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
28.04.2015, 16:49  [ТС] #28
Под кучей данных я и имел ввиду один объект, который передаю через интент. Этот вопрос решен.
Spelcrawler, попробую так, хотя не до конца понял, как в OnResultActivity принять интент(
Может, у вас есть под рукой пример или ссылочка на пример?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
28.04.2015, 16:50 #29
Цитата Сообщение от znseday Посмотреть сообщение
Может, у вас есть под рукой пример или ссылочка на пример?
Есть)
1
znseday
16 / 16 / 1
Регистрация: 20.03.2012
Сообщений: 454
29.04.2015, 22:27  [ТС] #30
Всем спасибо! С передачей туда-сюда через интенты разобрался.

Но у меня еще возникла такая идея использования статик-элементов.
Можно же создать базовый класс от активити, например:
Java
1
2
3
public class MyBaseClass extends Activity {
    public static int MegaData;
}
А затем все активити создавать от этого класса, например:
Java
1
2
3
public class SettingsActivity extends MyBaseClass {
// содержимое
}
Тогда вообще не нужно заботится о передаче данных. Переменная MegaData становиться как бы глобальная для всей программы (виджеты и сервисы сейчас не рассматриваю).

Как вам такой подход? Допустимо? Или все равно статик в топку и использовать только интенты?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2015, 22:27
Привет! Вот еще темы с ответами:

Портирование с одной версии на другую - Программирование Android
Добрый вечер, хотелось бы узнать как портировать приложения с версии 4.3 или 4.1 или 4.4 на 5.1.1 андроид. А то у Sony есть хороший плеер...

Перевод из одной системы счисления в другую - Программирование Android
Есть скрипт на javascript &lt;script language=&quot;JavaScript&quot;&gt; b= eval(prompt(&quot;число&quot;)); d=eval(prompt(&quot;из какой сс&quot;)); s=eval(prompt(&quot;в...

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

Как толкнуть одной фигурой другую в методе onDraw - Программирование Android
Здравствуйте.Я на этом форуме новенький.Это мое первое сообщение,так что если формат формулировки не совсем правильный,попрошу меня...


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

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

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