片段更改后如何阻止Videoview在viewPager中播放 [英] How to stop Videoview from playing inside a viewPager when fragment is changed

查看:277
本文介绍了片段更改后如何阻止Videoview在viewPager中播放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当片段更改时,我想停止在viewPager中播放videoView.代码中的问题是,当我更改或进入视频仍在播放的下一个片段时.

I want to stop a videoView from playing inside a viewPager when the fragment is change. The problem in the code is when I change or get into the next fragment the video is still playing.

这是Main Activity类的代码

Here is the code for Main Activity class

private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new FragmentStepOne(), "1");
adapter.addFragment(new FragmentStepTwo(), "2");
viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentStatePagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager manager) {

    super(manager);
}

@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}

@Override
public int getCount() {

    return mFragmentList.size();
}


public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}

这是Fragment类的代码

And here is the code for the Fragment class

public class FragmentStepOne extends Fragment{

public FragmentStepOne() {
}


VideoView video;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView =  inflater.inflate(R.layout.fragment_step_two, container,        false);

video = (VideoView) rootView.findViewById(R.id.videoView);

Uri uri = Uri.parse("android.resource://"+ getActivity().getPackageName()+"/"+ R.raw.video);
video.setVideoURI(uri);

MediaController mc=new MediaController(getContext());
mc.setAnchorView(video);
video.setMediaController(mc);
video.requestFocus();



return rootView;
}

请帮助提前谢谢您

推荐答案

在您的片段中覆盖override fun setUserVisibleHint(isVisibleToUser: Boolean)

因为setUserVisibleHintonCreateView之前被调用,请确保检查视图是否不为空(以便避免出现空指针异常).

because setUserVisibleHint is called before onCreateView Make sure you check if the view is not null (so that you can avoid null pointer exceptions).

这是我实施我的方法:

override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        if (view != null)
            if (!isVisibleToUser)
                if (videoView.isPlaying) {
                    videoView.stopPlayback()
                }
    }

我正在扩展片段androidx.fragment.app.Fragment

这篇关于片段更改后如何阻止Videoview在viewPager中播放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆