У меня есть 3 фрагмента и активность. Я хочу включить вкладки в ActionBar
и назначить Fragment
каждой из трех вкладок. Как правильно это сделать?
ОРИГИНАЛЬНАЯ ПОЧТА
У меня есть приложение, которое я разрабатываю с помощью приложения ввода-вывода Google в качестве руководства. Я внедрил вкладки в ActionBar
. Кажется, что они работают до изменения ориентации планшета. Например, все 3 вкладки имеют Fragment
. Я могу переключаться между ними очень хорошо, но когда я меняю ориентацию, независимо от того, что Fragment
я последний раз смотрел, видимо, но нажатие на вкладки больше не меняет вид... как будто они отключены. Как и ожидалось, возврат к исходной ориентации не "исправляет" его.
Я изучил состояние сохранения и восстановления, но я не вижу, как это поможет.
EDIT
Уровень модуля:
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);
и a TabListener
следующим образом:
EDIT удалено
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;
}
}
Он по-прежнему делает то же самое. Я действительно не знаю, что происходит.