2015-06-01 132 views
6

这几乎是一个经典的Android使用案例。假设我们有2个片段:FragmentA和FragmentB。Android方向更改:不同的布局,相同的片段

在横向模式下,FragmentA和FragmentB并排坐在一起。

在纵向模式下,它们在使用时各占用全屏幕。

(见这个形象,但替代片剂 - >景观和handset->人像) Different Layout, Same Fragments on Orientation Change

如这里解释(Supporting Single-Pane and Multi-Pane Layouts),有2种方式来实现这一目标:

1-多片段,一个活动:使用一个活动,而不考虑设备大小,但在运行时决定是否在布局中组合片段(以创建多窗格设计)或交换片段(以创建单窗格设计)。

2-多个片段,多个活动:在平板电脑上,将多个片段放置在一个活动中;在手机上,使用单独的活动来托管每个片段。例如,当平板电脑设计在活动中使用两个片段时,对手机使用相同的活动,但提供包含第一个片段的替代布局。当在手机上运行并且需要切换片段时(例如用户选择某个项目时),请启动另一个承载第二个片段的活动。

这让很多的理论意义,但我打在试图真正实现这些方法的执行的方式,恢复片段状态的方向变化时和后退按钮一些障碍按

我尝试了第一种方法,但是发现它很麻烦,因为它需要手动管理所有片段事务,特别是因为不能轻易更改片段的容器。确定后退按钮上的操作也是一种痛苦,因为后台堆叠中的最后一笔交易可能属于其他方向。

现在我正在尝试第二个选项。它看起来比较干净,但碎片在每次方向变化时都重新创建(因为每个方向使用不同的Activity)。 我想有一种方法来从其他活动/方向恢复片段状态。

任何人都可以解释如何做到这一点,或指向我一个适当的教程或示例应用程序?

+1

一般情况下,从双窗格在同一设备上单一窗口切换方式(来自两个窗格中去,以一当应该发生什么心智模式有所不同,可能会产生混淆)。这就是为什么你没有经常看到这个模式,而是看到更多细粒度的布局更改,这些更改可以使横向的单个窗格或纵向的两个窗格适应。 – ianhanniballake

+0

我不明白你是什么意思,“我想有一种方法来从其他活动/方向恢复片段状态。”其他活动是指什么? – Dinash

回答

4
  • MainActivity添加该配置其中片段是更换 <activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT"/></intent-filter> </activity
  • 您有FragmentA创建片段景观布局FragmentB enter image description here
  • 如果您需要更改这两个片段的行为你应该改变 onConfigurationChanged事件的片段。不建议

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { //write your stuff for landscape orientation }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //write your stuff for portrait orientation } }

相关问题