Урок 77. Tab - вкладки. TabActivity. Activity, как содержимое вкладки

Обсуждение уроков
AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение AndreyI » 22 окт 2012, 17:04

Ну так и стройте проект на платформе Android 2.3.3
Project->Properties->Android выберите платформу Android 2.3.3
Если у вас нет этого пакета, скачайте через Android SDK Manager

Если вы будете строить проект на новых платформах, то нет никаких гарантий, что приложение будет работать под старыми версиями Android.

ЗЫ Вы же не будете писать приложение под XP на API Win7

vagolo
Сообщения: 5
Зарегистрирован: 08 дек 2012, 16:55

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение vagolo » 08 дек 2012, 17:24

Привет!
Я только начинаю изучать, поэтому многое не знаю и не понятно...
Разбираюсь с сабжем.
Подскажите, плз, как можно вызвать метод активити вкладки из главного активити.
Смысл:
MainActivity содержит Spinner и Tabs с двумя вкладками (с какими-то элементами ввода/вывода TextView, Spinner, etc). Необходимо при изменении значения выбора Spinner в MainActivity изменить значения элементов ввода/вывода во вкладках.
Решил, что это можно реализовать в onItemSelected для Spinner из MainActivity вызвав public-методы активити вкладок, передав туда код выбранного элемента и по нему уже установить требуемые значения элементов ввода/вывода во вкладках.
Но никак не получается достучаться до этих public-методов активити вкладок...
Или это реализуется по другому?

Заранее благодарен.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 08 дек 2012, 17:40

Другие activity в это время в паузе, 2) просто обратившись к ним не получится достучаться; 2) у вас нету объекта что бы обращаться к паблик методам.
R.id.team
Политика на форуме запрещена

vagolo
Сообщения: 5
Зарегистрирован: 08 дек 2012, 16:55

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение vagolo » 08 дек 2012, 18:38

rezak90 писал(а):Другие activity в это время в паузе, 2) просто обратившись к ним не получится достучаться; 2) у вас нету объекта что бы обращаться к паблик методам.
Насколько я понимаю, объекты создаются при onCreate. Вставил вывод в лог тестового сообщения в onCreate каждой активити. При запуске приложения отображается первая вкладка Tabs с принадлежащей ей объектами ввода/вывода и лог выводится тестовое сообщение (для второй активити только при переключении на вторую вкладку) => по крайней мере, объекты первой (активной) вкладки создаются сразу после старта приложения. Или это не так?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 08 дек 2012, 19:02

Первая создаётся потому что она при старте, вторая создастся при переключении, но как только вы переходите на вторую то первая переходит в паузу и обратится к её элементам не получится. Вы чуть не правильно мыслите, вам нужно передавать данные а не менять элементы, передали данные из первой вкладки во вторую и во второй эти данные используйте/меняйте.
R.id.team
Политика на форуме запрещена

vagolo
Сообщения: 5
Зарегистрирован: 08 дек 2012, 16:55

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение vagolo » 08 дек 2012, 19:31

rezak90 писал(а):Первая создаётся потому что она при старте, вторая создастся при переключении, но как только вы переходите на вторую то первая переходит в паузу и обратится к её элементам не получится. Вы чуть не правильно мыслите, вам нужно передавать данные а не менять элементы, передали данные из первой вкладки во вторую и во второй эти данные используйте/меняйте.
Возможно, я не ясно задал вопрос, но мне необходимо другое.
Нет необходимости передавать данные из одной вкладки в другую. Надо установить определенные значения в объекты вкладок при изменения выбора в Spinner из MainActivity. Например, в Spinner выбираем "Яблоко", тогда в первой вкладке "Цвет" в TextView1 выводится "Красное", а во второй вкладке "Размер" в TextView2 выводится "Большое".

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 08 дек 2012, 20:57

я вас правильно понял, вот вы во вторую вкладку и передаёте слово "Большое", во второй активити принимаете данные и присваиваете их своей TextView2 текст. В андроиде не меняется (менять можно но костылями) контент когда он не активен, исходя из входящих данных он и меняется.
R.id.team
Политика на форуме запрещена

vagolo
Сообщения: 5
Зарегистрирован: 08 дек 2012, 16:55

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение vagolo » 08 дек 2012, 21:43

rezak90 писал(а):я вас правильно понял, вот вы во вторую вкладку и передаёте слово "Большое", во второй активити принимаете данные и присваиваете их своей TextView2 текст. В андроиде не меняется (менять можно но костылями) контент когда он не активен, исходя из входящих данных он и меняется.
Нет. Во вкладки ничего кроме индекса выбранного элемента в Spinner из MainActivity не передается.
"Красное" является элементом массива цветов, который принадлежит классу первой вкладки. "Большое" является элементом массива размеров, который принадлежит классу второй вкладки. Выбор элемента из этих массивов должен выполняться в зависимости от выбранного значения Spinner из MainActivity.

Наверное, можно попробывать следующее:
1. В обработчике onItemSelected Spinner из MainActivity определять активную вкладку. В зависимости от выбранной вкладки по R.id.* выбирать все элементы ввода/вывода и устанавливать их значения.
2. При выборе любой вкладки в onResume считывать значение выбранного значения в Spinner из MainActivity (например, объявив static-переменную в MainActivity, в которую и заносить выбранное значение из Spinner по onItemSelected) и устанавливать по его значению все элементы ввода/вывода, принадлежащие данной вкладке.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 08 дек 2012, 22:03

ну раз хочется велосипед то пожалуйста
R.id.team
Политика на форуме запрещена

vagolo
Сообщения: 5
Зарегистрирован: 08 дек 2012, 16:55

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение vagolo » 08 дек 2012, 22:26

rezak90 писал(а):ну раз хочется велосипед то пожалуйста
Мне хочется, чтобы элементы ввода/вывода во вкладках устанавливались в значения, выбранные из массивов, принадлежащих вкладкам, в соответствии с выбранным значение Spinner из MainActivity. А как это реализовать - пока не знаю. Поэтому сюда и обратился. И является ли предложенный мной способ велосипедом - то же не знаю...
Но, все равно, спасибо за обсуждение.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение KamiSempai » 08 дек 2012, 22:47

Передавать данные в еще не созданный объект нет смысла.
Можно поступить так, при изменении значений в одной из вкладок, записывать значения в Preferences. Затем, всех вкладках переопределить метод onResume() в котором нужно будет вытащить необходимые, для конкретной вкладки, значения из Preferences и по этим данным заполнить вкладку.

Либо, вместо Preferences можно использовать Singleton.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 08 дек 2012, 23:48

Зачем в языке вообще существует private? Давайте всё объявлять в статик и меньше проблем будет)))) если кто то увидит такой код то по голове не погладят. Да это решит вашу данную задачу, но это не есть хороший способ. Это был бы хороший способ если бы он был единственным выходом.

Вариант с преференсом не плох, но тоже не идеален, не говорю что он плох, просто не логичен и не оправдан, если бы мой начальник посмотрел и спросил бы зачем я использую файл для того что бы хранить всего одну цифру он бы меня оштрафовал =).

Для чего в андроиде существует bundle? Для того что бы передавать через него данные. Вот и мой вывод что следует через него передавать из активити в активити.
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение KamiSempai » 09 дек 2012, 22:25

rezak90 писал(а):Для чего в андроиде существует bundle? Для того что бы передавать через него данные. Вот и мой вывод что следует через него передавать из активити в активити.
Что-то я не совсем пойму как в этой ситуации использовать Bundle.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 09 дек 2012, 23:34

самый простой, это хранить в табхосте tabspec и при нажатии на соответствующий tabspec делать ему новый setContent в который класть интент с установленным бандлом.
R.id.team
Политика на форуме запрещена

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение igrok-vip » 04 май 2013, 19:35

Подскажите как программно можно перейти на другую вкладку?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 04 май 2013, 20:37

igrok-vip писал(а):Подскажите как программно можно перейти на другую вкладку?
У TabHost есть метод setCurrentTab
R.id.team
Политика на форуме запрещена

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение igrok-vip » 05 май 2013, 10:31

Да, я тоже сразу про него подумал, но почему-то если ставлю:
TabHost tabHost = getTabHost();
tabHost.setCurrentTabByTag("tag2");
допустим в кнопку на первой активити, то приложение вылетает с ошибкой.
Наверное как-то по другому нужно сделать?

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение Tamachi » 05 май 2013, 11:11

Кстати, не забывайте, что передача через Intent -- довольно медленная. Значительно быстрее было бы использовать какой-нибдуь Singleton и передавать его. Это будет экономнее как по времени исполнения, так и по объёму кода.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение rezak90 » 05 май 2013, 11:49

igrok-vip писал(а):Да, я тоже сразу про него подумал, но почему-то если ставлю:
TabHost tabHost = getTabHost();
tabHost.setCurrentTabByTag("tag2");
допустим в кнопку на первой активити, то приложение вылетает с ошибкой.
Наверное как-то по другому нужно сделать?
всё правильно, а то что вылетает не означает что не правильно))) ошибку в студию
R.id.team
Политика на форуме запрещена

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 77. Tab - вкладки. TabActivity. Activity, как содер

Сообщение igrok-vip » 05 май 2013, 13:23

Понял в чём проблема была. Кнопка находится на OneActivity а обработчик в MainActivity. Но если написать обработчик в OneActivity, то он не знает что такое getTabHost, а если OneActivity наследовать от TabActivity как MainActivity - то приложение вылетает сразу после запуска. Подскажите как сделать?

Ответить