У меня есть 3 фрагмента и активность.Я хочу включить вкладки на ActionBar
и назначить Fragment
каждой из 3 вкладок.Как мне это правильно подключить?
ОРИГИНАЛЬНЫЙ ПОСТ
У меня есть приложение, которое я разрабатываю, используя приложение Google I / O в качестве руководства.Я реализовал вкладки в ActionBar
.Кажется, они работают, пока ориентация планшета не изменится.Например, все 3 вкладки имеют Fragment
.Я могу переключаться между ними просто отлично, но когда я меняю ориентацию, то какой бы Fragment
я не просматривал в последний раз, он остается видимым, но нажатие на вкладки больше не меняет вид ... как будто они отключились.Как и ожидалось, возвращение к исходной ориентации не «исправляет» это.
Я изучил сохранение и восстановление состояния, но я не вижу, как это могло бы помочь.
РЕДАКТИРОВАТЬ
уровень модуля:
Fragment mFragmentA = (Fragment) new AFragmentTab();
Fragment mFragmentB = (Fragment) new BFragmentTab();
Fragment mFragmentC = (Fragment) new CFragmentTab();
У меня есть что-то подобное в onCreate
:
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
ActionBar.Tab tabA = actionBar.newTab().setText("text a");
ActionBar.Tab tabB = actionBar.newTab().setText("text b");
ActionBar.Tab tabC = actionBar.newTab().setText("text c");
tabA.setTabListener(this);
tabB.setTabListener(this);
tabC.setTabListener(this);
actionBar.addTab(tabA);
actionBar.addTab(tabB);
actionBar.addTab(tabC);
и TabListener
вот так:
РЕДАКТИРОВАТЬ это удалено
class MyTabListener implements ActionBar.TabListener {
private Fragment mFragment;
// Called to create an instance of the listener when adding a new tab
public MyTabListener(Fragment fragment) {
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_content, mFragment, null);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
}
РЕДАКТИРОВАТЬ
Я переместил TabListener
.Вместо того, чтобы быть отдельным классом, я реализую TabListener
на Activity
.Затем на методах Selected
и Unselected
у меня есть что-то вроде:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
switch (tab.getPosition()) {
case 0:
ft.add(R.id.fragment_content, mFragmentA, null);
break;
case 1:
ft.add(R.id.fragment_content, mFragmentB, null);
break;
case 2:
ft.add(R.id.fragment_content, mFragmentC, null);
break;
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
switch (tab.getPosition()) {
case 0:
ft.remove(mFragmentA);
break;
case 1:
ft.remove(mFragmentB);
break;
case 2:
ft.remove(mFragmentC);
break;
}
}
Это все еще делает то же самое.Я действительно не знаю, что происходит.