Ell*_*era 6 android android-fragments android-orientation
这几乎是一个经典的Android用例.
假设我们有2个片段:FragmentA和FragmentB.
在横向模式下,FragmentA和FragmentB并排放置.
在纵向模式下,它们在使用时都会占据整个屏幕.
(请参阅此图片,但更换平板电脑 - >风景和手机 - >肖像)

如此处所述(支持单窗格和多窗格布局),有两种方法可以实现此目的:
1-多个片段,一个活动:无论设备大小如何,都使用一个活动,但在运行时决定是否在布局中组合片段(以创建多窗格设计)或交换片段(以创建单窗格设计).
2-多个片段,多个活动:在平板电脑上,将多个片段放在一个活动中; 在手机上,使用单独的活动来托管每个片段.例如,当平板电脑设计在活动中使用两个片段时,对手机使用相同的活动,但提供仅包含第一个片段的替代布局.当在手机上运行并且您需要切换片段时(例如当用户选择项目时),启动另一个托管第二个片段的活动.
这在理论上很有意义,但是我试图以一种方式实现这些方法中的任何一种方法遇到一些障碍,这种方法在方向改变时和按下后退按钮时恢复碎片的状态.
我尝试了第一种方法并且相当远,但发现它很乱,因为它需要手动管理所有片段事务,特别是因为片段的容器不能轻易更改.由于Backstack上的最后一个事务可能属于另一个方向,因此决定在后退时执行什么操作也很痛苦.
现在我正在尝试第二种选择.到目前为止它看起来更干净,但片段会在每次方向更改时从头开始重新创建(因为每个方向使用不同的Activity).我想有办法从其他活动/方向恢复Fragment状态.
任何人都可以解释如何做到这一点,或指向我适当的教程或示例应用程序?
<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
@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
}
}
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |