Страница 1 из 1
TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 10:35
skull
Привет всем!
Смотрел урок
http://startandroid.ru/ru/uroki/vse-uro ... ladki.html
Хотел сделать таким методом, но public class MainActivity extends
TabActivity устаревший метод.
Вопрос:
1) Как это можно реализовать по другому ??
2) Если все же реализую методом
TabActivity то приложение будет работать на устройствах с версией Андроид 4.0.х - 4.х.х
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 11:52
klblk
1)
http://startandroid.ru/ru/uroki/vse-uro ... pisok.html, если нужна поддержка старых устройств, то можно использовать библиотеку SharlockActionBar или AppCompat
2) Да, работать будет.
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 12:27
skull
то есть если я буду использовать TabActivity то не будут поддерживаться устройства со старой версией андроид ?
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 13:03
skull
Будут какие проблемы если использовать TabActivity? или где то коряво работать будет ?)
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 13:27
Viewer
skull писал(а):Будут какие проблемы если использовать TabActivity? или где то коряво работать будет ?)
Да не будет никаких проблем, это вы уже сами для себя решайте, стоит ли забивать голову устаревшими приемами и методами проектирования или сразу учиться использовать современные средства.
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 13:42
klblk
skull писал(а):
то есть если я буду использовать TabActivity то не будут поддерживаться устройства со старой версией андроид ?
TabActivity везде работает, ActionBar'а нет в старых версиях.
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 13:56
skull
Ребята спасибо за ответы!
В 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 исчезает

Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 15:01
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);" в вашем коде нужно заменить на что-то другое
Считайте, что
работа с фрагментами это базовые навыки, которыми необходимо овладеть на уровне понимания.
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 19:54
skull
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);" в вашем коде нужно заменить на что-то другое
Считайте, что
работа с фрагментами это базовые навыки, которыми необходимо овладеть на уровне понимания.
Пробовал работать с фрагментами, конечно может я что то не правильно делаю, но при переключении между табами они возвращаются в исходное состояние .)
Re: TabActivity. Activity, как содержимое вкладки
Добавлено: 05 май 2014, 21:17
Viewer
Пробовал работать с фрагментами, конечно может я что то не правильно делаю, но при переключении между табами они возвращаются в исходное состояние .)
Я могу только предполагать:
Возможно вы при выборе вкладки каждый раз создаете новый фрагмент, вместо того, чтобы использовать тот, что был использован ранее. Обычно новый фрагмент создается и добавляется только при начальной инициализации, при добавлении фрагмента в FragmentManager ему можно присвоить тэг, по этому тегу всегда можно проверить есть ли сохраненный фрагмент во FragmentManager с помощью findFragmentByTag и если он есть, то его продолжают использовать, если findFragmentByTag возвращает null , то создается новый фрагмент. Либо нужно создавать все фрагменты для табов и сохранять ссылки на них, а потом можно будет только добавлять нужный фрагмент в FragmentManager, не забыв удалить старый. У ActionBar.TabListener есть соответствующие методы обратного вызова :
onTabSelected - в нем добавляем фрагмент соответствующий данной вкладки в контейнер, onTabUnselected - здесь удаляем фрагмент из контейнера.
Возможно вы неправильно обрабатываете жизненный цикл фрагмента и не сохраняете состояние своих данных. Когда фрагмент перестает быть виден на экране, все его состояние (данные) должно быть сохранено, аналогично как это делается и для Activity (смотрите уроки про разворот экрана и пр.), после того, как фрагмент вновь появляется на экране вся его иерархия View будет создана заново и нужно заполнить её сохраненными данными. Более того фрагмент имеет даже больше возможностей сохранять свое состояние установкой setRetainInstance(true), но это сделано больше для ускорения и быстрой загрузки фрагментов, в любом случае нужно "научить" фрагмент сохраняться через onSaveInstanceState , а потом смотреть как оптимизировать загрузку фрагмента с помощью установки setRetainInstance(true)