У меня есть простой макет, содержащий VideoView.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"
android:gravity="center" >
<VideoView
    android:id="@+id/videoPlayer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
</RelativeLayout>
 Activity, который использует этот макет, создает Fragment, чтобы запустить VideoView
public class VideoPlayerActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_video_player);
            createNewWorkerFragment();
    }
        private void createNewWorkerFragment() {
            FragmentManager fragmentManager = getFragmentManager();
            VideoPlayerActivityWorkerFragment workerFragment = (VideoPlayerActivityWorkerFragment)fragmentManager.findFragmentByTag(VideoPlayerActivityWorkerFragment.Name);
            if (workerFragment == null) {
                workerFragment = new VideoPlayerActivityWorkerFragment();
                fragmentManager.beginTransaction()
                               .add(workerFragment, VideoPlayerActivityWorkerFragment.Name)
                               .commit();
            }
        }
}
 VideoPlayerActivityWorkerFragment выглядит следующим образом:
public class VideoPlayerActivityWorkerFragment extends Fragment {
     public static String Name = "VideoPlayerActivityWorker";
     private VideoView mVideoPlayer;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setRetainInstance(true);
         mVideoPlayer = (VideoView) mActivity.findViewById(R.id.videoPlayer);
         mVideoPlayer.setVideoPath(mActivity.getIntent().getExtras().getString("path"));
         MediaController controller = new MediaController(mActivity);
         controller.setAnchorView(mVideoPlayer);
         mVideoPlayer.setMediaController(controller);
         mVideoPlayer.requestFocus();
         mVideoPlayer.start();
     }
     @Override
     public void onAttach(Activity activity) {
        super.onAttach(activity);
        mActivity = activity;
     }
     @Override
     public void onDetach() {
        super.onDetach();
        mActivity = null;
     }
}
Это проблема, с которой я столкнулся, когда VideoPlayerActivity запускается VideoPlayerActivityWorkerFragment и начинается воспроизведение VideoView, однако, когда я поворачиваю устройство, видео останавливается и не воспроизводится, весь View кажется, ушел из макета. Из-за setRetainInstance(true); я думал, что VideoView будет продолжать играть. Может ли кто-нибудь сообщить мне, что я делаю неправильно? Я использовал этот шаблон в другом месте (не с VideoView), и он успешно разрешает поворот.
Я не желаю использовать android:configChanges="keyboardHidden|orientation|screenSize" или подобные методы, я хотел бы обработать изменение ориентации с помощью Fragment s.
Заранее благодарим вас за помощь.
Изменить
Я решил выбрать решение, которое я сделал, потому что он работает. Видеовизу и контроллер необходимо воссоздавать каждый раз, когда вызывается onCreateView, и положение воспроизведения должно быть установлено в onResume и повторно записано в onPause. Однако во время вращения воспроизведение прерывается. Решение не оптимально, но оно работает.
