Activityが動的に追加したragment、回転画面が崩れる問題
3802 ワード
質問:Activityがあり、activityにFragmentが動的に追加され、縦画面ではすべての機能が完璧ですが、携帯電話の画面を回転させ、横画面に切り替えると、画面全体が崩れてしまいます.
Activityの登録
崩れた後、最初の時間はなぜ跳んだのかを考えていたに違いない.
そこでActivityの画面を縦に切り替えると、ライフサイクルが変化することを思い出します.具体的にどのように変化するかはここではあまり言わないで、ネット上の資料が多くて、自分で勉強すればいいです.
トランポリンの原因が見つかった以上、解決策を探しましょう.
(1)AndroidManifestでActivityを宣言する際に画面方向を制限し、回転を許さない.
このようにします.
(2)Activityで動的に加入した場合はfragmentがnullであるか否かを判断し、作成と追加を繰り返さない
Activityの登録
<activity
android:name=".activity.TopicListActivity"
>
Activityはもともとこう書いてありましたprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common);
fragment = new TopicListFragment();
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.topicfragment,fragment).commit();}
という書き方で、縦横画面切り替え時に崩れてしまいました.崩れた後、最初の時間はなぜ跳んだのかを考えていたに違いない.
そこでActivityの画面を縦に切り替えると、ライフサイクルが変化することを思い出します.具体的にどのように変化するかはここではあまり言わないで、ネット上の資料が多くて、自分で勉強すればいいです.
トランポリンの原因が見つかった以上、解決策を探しましょう.
(1)AndroidManifestでActivityを宣言する際に画面方向を制限し、回転を許さない.
このようにします.
<activity
android:name=".activity.TopicListActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
>
</activity>
(2)Activityで動的に加入した場合はfragmentがnullであるか否かを判断し、作成と追加を繰り返さない
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common);
if (fragment==null){
fragment = new TopicListFragment();
}
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.topicfragment,fragment).commit();
これでこの問題を解決します