带有旋转片段的ActionBar选项卡

问题描述:

我正在用ActionBar和以下两个选项卡构建应用程序。 一切工作正常,如果设备/模拟器不旋转。如果旋转,标签状态自动切换到tab1(正常,因为onCreate被调用),但内容不会被更改。如果我在新方向中选择一个选项卡,则将调用所选Fragment中的onCreateView()方法,但视图不会更新(始终保持相同)。有小费吗?带有旋转片段的ActionBar选项卡

代码。

主要活动:

ActionBar actionbar = getActionBar(); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab ATab = actionbar.newTab().setText(R.string.player); 
    ActionBar.Tab BTab = actionbar.newTab().setText(R.string.stations); 

    Fragment AFragment = new AFragment(); 
    Fragment BFragment = new BFragment(); 

    PlayerTab.setTabListener(new MyTabsListener(AFragment)); 
    StationsTab.setTabListener(new MyTabsListener(BFragment)); 

    actionbar.addTab(ATab); 
    actionbar.addTab(BTab); 

随着该显示一个简单的TextView相同标签。 textview简单地说哪个选项卡被选中。

片段:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.a, container, false); 
} 

片段布局,如上所述,仅包含具有硬编码的文本一个TextView。 (仅用于测试目的)


主布局看起来像这样。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 


    <LinearLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
</LinearLayout> 

</LinearLayout> 
+0

你想的onCreate()当设备被转动而叫什么名字? – nhaarman 2012-02-08 00:01:26

+0

是和否,在这个例子中是可以的。在最终的应用程序,也好,但我认为不是最好的方式。你想使用'android:configChanges =“keyboardHidden | orientation”'?我读过它,任何人都说过关于内存泄漏和最后的手段。是对的吗?有没有更好的办法? – Leandros 2012-02-08 00:06:14

已解决。我已经重新创建了片段,不再那么解决它。

改变了我的TabListener和onTabSelected(Tab tab, FragmentTransaction ft)ft.add()ft.replace()

+2

这个错误也在官方Android文档中: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs 也许有人可以在那里修复它。 – StefanMK 2014-09-10 12:06:52