屏幕旋转时碎片的优点

时间:2015-10-24 08:58:32

标签: android

   I wonder if there is any advantage of fragments, on screen rotation.
    Generally fragments get destroyed followed by activity. Is there something that fragments retain while doing so? 
在活动和片段中都会调用

onDestroy()方法。

2 个答案:

答案 0 :(得分:0)

我可以尝试在屏幕旋转上找出Fragment的优势。

实时应用问题是:

  

Android是Activity的潜在频繁销毁重建。最常见的时间是用户在水平和纵向方向(屏幕旋转)之间旋转设备。

     

崩溃通常会发生,因为设备方向更改会导致 Android框架在任何包含的视图中拆除显示的Activity,然后完全重建{{1层次结构。对活动或活动中的视图的任何引用都会突然变为无效。同样,由于用户操作或类似操作而设置的活动或视图中的任何引用现在都将丢失。

有很多方法可以解决这个问题,但最简单的方法之一是利用碎片

要记住的事情:

  

片段不会自动解决此问题,因为默认情况下,当活动被拆除以响应方向更改时,活动中包含的片段也会与任何包含的视图一起被拆除。

解决方案位于未充分利用的方法中: Activity/View ,其值为Fragment.setRetainInstance

<强>为什么吗

  

使用值true调用setRetainInstance会导致Android在true拆解/重建循环中保留Fragment。与Activity一起,片段或视图中包含的Fragment或其他对象引用仍然存在。

在片段实例上调用Views。当方向发生更改时,Android ...

  • 保留对Fragment实例的引用
  • 删除旧的Activity实例
  • 创建新的Activity实例
  • 将保留的Fragment实例附加到新的Activity实例

答案 1 :(得分:0)

你必须添加

sortByLenOrLex''' :: (Foldable f, Ord a) => [f a] -> [f a]
sortByLenOrLex''' as = unamend <$> sortBy cmp (amend <$> as) where
  cmp (a,n,a') (b,m,b') | n > m     = GT
                        | n < m     = LT
                        | otherwise = compare a' b'
  amend    x      = (x, length x, toList x)
  unamend (x,_,_) =  x

在父级Activity中也调用

*Main> sortByLenOrLex''' [Just 3, Just 4, Just 3, Nothing]
[Nothing,Just 3,Just 3,Just 4]

*Main> sortByLenOrLex''' [(4,1),(1,1),(1,2),(1,1),(3,1)]
[(4,1),(1,1),(1,1),(3,1),(1,2)]

*Main> sortByLenOrLex''' [Left "bla", Right "foo", Right "foo", Right "baz"]
[Left "bla",Right "baz",Right "foo",Right "foo"]

*Main> sortByLenOrLex''' [(3,"hello"),(2,"goodbye"),(1,"hello")]
[(2,"goodbye"),(3,"hello"),(1,"hello")]

在onCreate of fragment