Другой фрагмент не был загружен при изменении ориентации (Android)

Я создал тестовый проект, в котором два разных фрагмента должны быть показаны в одном и том же действии. Один фрагмент для пейзажа, а другой для портрета.

# My unique activity
public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

# First Fragment
public class LandscapeFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("LANDSCAPE");
        return v;
    }
}

# Other Fragment
public class PortraitFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("PORTRAIT");
        return v;
    }
}

И у меня есть два файла main.xml, один в layout/, а другой в layout-land/. Каждый файл main.xml указывает на правильный используемый фрагмент.












Когда я открываю приложение в горизонтальном положении, отображается фрагмент ландшафта, а когда я открываю приложение в портретном режиме, отображается фрагмент портрета. Все идет нормально.

Но если я открою альбомную ориентацию и поверну устройство в вертикальное положение, то LandscapeFragment перезагрузится и отобразится. Что не является прогнозируемым поведением. PortraitFragment должен быть загружен.

И то же самое происходит наоборот, если устройство запускается в портретной ориентации, а затем я поворачиваю его в альбомную: PortraitFragment просто перезагружается, вместо того, чтобы загрузить LandscapeFragment.

Что я делаю не так?

6
задан Luckcheese 5 April 2012 в 16:28
поделиться