Страница 2 из 6

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

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

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

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

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

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

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

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

Добавлено: 08 дек 2012, 17:40
rezak90
Другие activity в это время в паузе, 2) просто обратившись к ним не получится достучаться; 2) у вас нету объекта что бы обращаться к паблик методам.

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

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

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

Добавлено: 08 дек 2012, 19:02
rezak90
Первая создаётся потому что она при старте, вторая создастся при переключении, но как только вы переходите на вторую то первая переходит в паузу и обратится к её элементам не получится. Вы чуть не правильно мыслите, вам нужно передавать данные а не менять элементы, передали данные из первой вкладки во вторую и во второй эти данные используйте/меняйте.

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

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

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

Добавлено: 08 дек 2012, 20:57
rezak90
я вас правильно понял, вот вы во вторую вкладку и передаёте слово "Большое", во второй активити принимаете данные и присваиваете их своей TextView2 текст. В андроиде не меняется (менять можно но костылями) контент когда он не активен, исходя из входящих данных он и меняется.

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

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

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

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

Добавлено: 08 дек 2012, 22:03
rezak90
ну раз хочется велосипед то пожалуйста

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

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

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

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

Либо, вместо Preferences можно использовать Singleton.

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

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

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

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

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

Добавлено: 09 дек 2012, 22:25
KamiSempai
rezak90 писал(а):Для чего в андроиде существует bundle? Для того что бы передавать через него данные. Вот и мой вывод что следует через него передавать из активити в активити.
Что-то я не совсем пойму как в этой ситуации использовать Bundle.

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

Добавлено: 09 дек 2012, 23:34
rezak90
самый простой, это хранить в табхосте tabspec и при нажатии на соответствующий tabspec делать ему новый setContent в который класть интент с установленным бандлом.

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

Добавлено: 04 май 2013, 19:35
igrok-vip
Подскажите как программно можно перейти на другую вкладку?

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

Добавлено: 04 май 2013, 20:37
rezak90
igrok-vip писал(а):Подскажите как программно можно перейти на другую вкладку?
У TabHost есть метод setCurrentTab

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

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

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

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

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

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

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

Добавлено: 05 май 2013, 13:23
igrok-vip
Понял в чём проблема была. Кнопка находится на OneActivity а обработчик в MainActivity. Но если написать обработчик в OneActivity, то он не знает что такое getTabHost, а если OneActivity наследовать от TabActivity как MainActivity - то приложение вылетает сразу после запуска. Подскажите как сделать?