MediaController不在ViewPager中滑动

时间:2014-03-21 16:47:34

标签: android android-layout android-fragments android-viewpager android-mediaplayer

我正在使用ViewPager来显示FragmentPagerAdapter提供的几个片段。其中一个Fragments显示VideoViewMediaController

我面临的问题是,MediaController不会向左/右滑动,因为它应该与Fragment的其余部分一起滑动。 (希望你能跟着我^^)

我在StackOverflow上看了很多类似的讨论,但不幸的是没有一个能解决我的问题。

这是适配器实例化的Fragment xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <VideoView
        android:id="@+id/vv_project_details"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

这是代码属于onCreateView的{​​{1}}:

Fragment

一切正常,除了浏览我的 final VideoView vv = (VideoView) rootView .findViewById(R.id.vv_project_details); vv.setVideoURI(Uri uri = new Uri("some-uri")); mMediaController = new MediaController(getActivity(), false); // should I use rootView.getContext() instead of getActivity()? vv.setMediaController(mMediaController); vv.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mMediaController.setAnchorView(vv); mMediaController.show(0); } }); Fragments出现已修复 ...: - /

编辑:这是在2 MediaController之间滑动时制作的屏幕截图。如您所见,Fragments仍处于初始位置......

Screenshot showing that the Mediacontroller remains at its inital position while swiping

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我执行以下操作来手动隐藏/显示控制器:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            if (position == Tabs.NOWPLAYING.ordinal())
                tabPagerAdapter.getNowPlayingFragment().show();
            else 
                tabPagerAdapter.getNowPlayingFragment().hide();

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

它需要重构,因为在尝试隐藏之前它不会检查控制器是否实际显示。如果你有两个以上的标签,这很重要。