Activityが動的に追加したragment、回転画面が崩れる問題

3802 ワード

質問:Activityがあり、activityにFragmentが動的に追加され、縦画面ではすべての機能が完璧ですが、携帯電話の画面を回転させ、横画面に切り替えると、画面全体が崩れてしまいます.
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();
これでこの問題を解決します