我有 3 个片段和一个活动。我想启用选项卡并为 3 个选项卡中的每一个ActionBar
分配一个。Fragment
如何正确连接?
原帖
我有一个正在开发的应用程序,使用 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
andUnselected
方法上我有类似的东西:
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;
}
}
它仍然在做同样的事情。我真的不知道发生了什么。