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

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
skull
Сообщения: 48
Зарегистрирован: 22 апр 2014, 15:49

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

Сообщение skull » 05 май 2014, 10:35

Привет всем!

Смотрел урок http://startandroid.ru/ru/uroki/vse-uro ... ladki.html

Хотел сделать таким методом, но public class MainActivity extends TabActivity устаревший метод.
Вопрос:

1) Как это можно реализовать по другому ??
2) Если все же реализую методом TabActivity то приложение будет работать на устройствах с версией Андроид 4.0.х - 4.х.х

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TabActivity. Activity, как содержимое вкладки

Сообщение klblk » 05 май 2014, 11:52

1) http://startandroid.ru/ru/uroki/vse-uro ... pisok.html, если нужна поддержка старых устройств, то можно использовать библиотеку SharlockActionBar или AppCompat
2) Да, работать будет.

skull
Сообщения: 48
Зарегистрирован: 22 апр 2014, 15:49

Re: TabActivity. Activity, как содержимое вкладки

Сообщение skull » 05 май 2014, 12:27

klblk писал(а):1) http://startandroid.ru/ru/uroki/vse-uro ... pisok.html, если нужна поддержка старых устройств, то можно использовать библиотеку SharlockActionBar или AppCompat
2) Да, работать будет.

то есть если я буду использовать TabActivity то не будут поддерживаться устройства со старой версией андроид ?

skull
Сообщения: 48
Зарегистрирован: 22 апр 2014, 15:49

Re: TabActivity. Activity, как содержимое вкладки

Сообщение skull » 05 май 2014, 13:03

Будут какие проблемы если использовать TabActivity? или где то коряво работать будет ?)

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: TabActivity. Activity, как содержимое вкладки

Сообщение Viewer » 05 май 2014, 13:27

skull писал(а):Будут какие проблемы если использовать TabActivity? или где то коряво работать будет ?)
Да не будет никаких проблем, это вы уже сами для себя решайте, стоит ли забивать голову устаревшими приемами и методами проектирования или сразу учиться использовать современные средства.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TabActivity. Activity, как содержимое вкладки

Сообщение klblk » 05 май 2014, 13:42

skull писал(а):
klblk писал(а):1) http://startandroid.ru/ru/uroki/vse-uro ... pisok.html, если нужна поддержка старых устройств, то можно использовать библиотеку SharlockActionBar или AppCompat
2) Да, работать будет.

то есть если я буду использовать TabActivity то не будут поддерживаться устройства со старой версией андроид ?
TabActivity везде работает, ActionBar'а нет в старых версиях.

skull
Сообщения: 48
Зарегистрирован: 22 апр 2014, 15:49

Re: TabActivity. Activity, как содержимое вкладки

Сообщение skull » 05 май 2014, 13:56

Ребята спасибо за ответы!

В TabActivity можно так:
TabHost tabHost = getTabHost();
TabHost.TabSpec tabSpec;
tabSpec = tabHost.newTabSpec("tag1");
tabSpec.setIndicator("Вкладка 1");
tabSpec.setContent(new Intent(this, listlayout.class));
tabHost.addTab(tabSpec);

а как быть с ActionBar ?
пробую так:
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Log.d("e", "selected tab: " + tab.getText());
if (tab.getPosition()==1){
Intent intent = new Intent(this, listlayout.class);
startActivity(intent);
//setContentView(R.layout.list_layout);
}

но layout грузится а ActionBar исчезает :(

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: TabActivity. Activity, как содержимое вкладки

Сообщение Viewer » 05 май 2014, 15:01

Загрузите проект с примерами из Support7Demos (расположена в <sdk>/extras/android/support/samples/Support7Demos/)
Подключите к нему все три библиотеки (appcompat gridlayout mediarouter) как описано в Adding libraries with resources по этому адресу http://developer.android.com/tools/supp ... setup.html и тщательно разберитесь как там и что работает.
Можно, конечно, не подключать библиотеки gridlayout и mediarouter, а подключить только appcompat, но тогда нужно удалить из примера Support7Demos все что к ним относится.

Но прежде всего, вам нужно освоить работу с фрагментами, рекомендую начать с этого, а потом уже переходить на все остальное.
Тогда вы поймете что
"Intent intent = new Intent(this, listlayout.class);
startActivity(intent);"
в вашем коде нужно заменить на что-то другое :)

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

skull
Сообщения: 48
Зарегистрирован: 22 апр 2014, 15:49

Re: TabActivity. Activity, как содержимое вкладки

Сообщение skull » 05 май 2014, 19:54

Viewer писал(а):Загрузите проект с примерами из Support7Demos (расположена в <sdk>/extras/android/support/samples/Support7Demos/)
Подключите к нему все три библиотеки (appcompat gridlayout mediarouter) как описано в Adding libraries with resources по этому адресу http://developer.android.com/tools/supp ... setup.html и тщательно разберитесь как там и что работает.
Можно, конечно, не подключать библиотеки gridlayout и mediarouter, а подключить только appcompat, но тогда нужно удалить из примера Support7Demos все что к ним относится.

Но прежде всего, вам нужно освоить работу с фрагментами, рекомендую начать с этого, а потом уже переходить на все остальное.
Тогда вы поймете что
"Intent intent = new Intent(this, listlayout.class);
startActivity(intent);"
в вашем коде нужно заменить на что-то другое :)

Считайте, что работа с фрагментами это базовые навыки, которыми необходимо овладеть на уровне понимания.
Пробовал работать с фрагментами, конечно может я что то не правильно делаю, но при переключении между табами они возвращаются в исходное состояние .)

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: TabActivity. Activity, как содержимое вкладки

Сообщение Viewer » 05 май 2014, 21:17

Пробовал работать с фрагментами, конечно может я что то не правильно делаю, но при переключении между табами они возвращаются в исходное состояние .)
Я могу только предполагать:
Возможно вы при выборе вкладки каждый раз создаете новый фрагмент, вместо того, чтобы использовать тот, что был использован ранее. Обычно новый фрагмент создается и добавляется только при начальной инициализации, при добавлении фрагмента в FragmentManager ему можно присвоить тэг, по этому тегу всегда можно проверить есть ли сохраненный фрагмент во FragmentManager с помощью findFragmentByTag и если он есть, то его продолжают использовать, если findFragmentByTag возвращает null , то создается новый фрагмент. Либо нужно создавать все фрагменты для табов и сохранять ссылки на них, а потом можно будет только добавлять нужный фрагмент в FragmentManager, не забыв удалить старый. У ActionBar.TabListener есть соответствующие методы обратного вызова :
onTabSelected - в нем добавляем фрагмент соответствующий данной вкладки в контейнер, onTabUnselected - здесь удаляем фрагмент из контейнера.
Возможно вы неправильно обрабатываете жизненный цикл фрагмента и не сохраняете состояние своих данных. Когда фрагмент перестает быть виден на экране, все его состояние (данные) должно быть сохранено, аналогично как это делается и для Activity (смотрите уроки про разворот экрана и пр.), после того, как фрагмент вновь появляется на экране вся его иерархия View будет создана заново и нужно заполнить её сохраненными данными. Более того фрагмент имеет даже больше возможностей сохранять свое состояние установкой setRetainInstance(true), но это сделано больше для ускорения и быстрой загрузки фрагментов, в любом случае нужно "научить" фрагмент сохраняться через onSaveInstanceState , а потом смотреть как оптимизировать загрузку фрагмента с помощью установки setRetainInstance(true)

Ответить