video不会在片段ViewPager中暂停

我使用视图寻呼机与片段来显示图像和video,我能够正确显示图像和video,但我有问题,当我刷video,然后video播放,但我刷下一个或以前,然后video仍在播放只是下一个或上一个屏幕,但是当我移动两个幻灯片的下一个或上一个,然后video正在停止,但为什么不在下一张或上一张幻灯片。

我更多的search,但我没有得到任何解决scheme,任何帮助将是可观的。 提前致谢。

这是我的代码:

这是片段类

public class ContentFragment extends Fragment { private final String imageResourceId; private String type; public ContentFragment(String imageResourceId,String type) { System.out.println("Path In cons="+imageResourceId+"and type is="+type); this.imageResourceId = imageResourceId; this.type= type; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("Test", "hello"); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.content_layout, container, false); TouchImageView imageView = (TouchImageView) view.findViewById(R.id.touchImage); imageView.setImageResource(R.id.touchImage); imageView.setMaxZoom(10f); VideoView videoView =(VideoView) view.findViewById(R.id.videoView1); if(type.equals("image")) { imageView.invalidate(); imageView.setVisibility(View.VISIBLE); videoView.setVisibility(View.GONE); try { System.out.println("IN Content Fragment"+imageResourceId.toString()); Bitmap bmp = BitmapFactory.decodeFile(imageResourceId.toString()); imageView.setImageBitmap(bmp); } catch(Exception e) { System.out.println("Error Of image File"+e); } } else try { if(type.equals("video")){ videoView.invalidate(); videoView.setVisibility(View.VISIBLE); imageView.setVisibility(View.GONE); String path = imageResourceId.toString(); videoView.setVideoURI(Uri.parse(path)); videoView.setMediaController(new MediaController(getActivity())); videoView.setFocusable(true); videoView.start(); } } catch(Exception e) { e.printStackTrace(); } return view; } } 

这是寻呼机适配器活动

 public class MediaActivity extends FragmentActivity { private MyAdapter mAdapter; private ViewPager mPager; public ArrayList<Content> contentList; Context context; LinearLayout numberOfPageLayout; SharedPreferences sharedPreferences; Handler progressHandler; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media); context=(Context) getApplicationContext(); mPager = (ViewPager) findViewById(R.id.pager); progressHandler = new Handler(); contentList=new ArrayList<Content>(); new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub contentList=new ContentDBAdapter(context).getAllContent(); } return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); mAdapter = new MyAdapter(getSupportFragmentManager(),contentList); mPager.setAdapter(mAdapter); } }.execute(); mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); } public static class MyAdapter extends FragmentPagerAdapter { ArrayList <Content>contList=new ArrayList<Content>(); public MyAdapter(FragmentManager fm,ArrayList<Content> cont) { super(fm); this.contList=cont; } @Override public int getCount() { totalPage=contList.size(); return contList.size(); } @Override public Fragment getItem(int position) { Content con=contList.get(position); return new ContentFragment(con.getPath(),con.getType()); } } } 

Related of "video不会在片段ViewPager中暂停"

这是因为ViewPager保持离屏片段的启动。 比如你有一个对用户可见的片段。 ViewPager将尝试保持前一个片段(在左侧)和下一个片段(在右侧)开始。 这允许ViewPager在用户决定更改页面时平滑滑动,因为下一页和前一页已经准备好了。

在你的情况下,video播放器不可见(屏幕外),但由于上述行为ViewPager保持开始。 你可以使用setOffscreenPageLimit()方法来改变这种行为。 如果您将页面限制设置为0 ,则屏幕外片段将立即暂停。 不幸的是,他们不仅会暂停,而且会停止并脱离活动。 这意味着当你返回到你的片段时,它会重新创build整个布局。 这就是为什么你可以尝试覆盖Fragment.setUserVisibleHint()Fragment.onHiddenChanged()并在那里执行你的暂停/播放逻辑。 ViewPager将更新片段的隐藏状态,具体取决于片段是否对用户实际可见。

希望这可以帮助。

你必须在播放video的片段中覆盖setUserVisibleHint方法。

 public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (this.isVisible()) { if (!isVisibleToUser) // If we are becoming invisible, then... { //pause or stop video } if (isVisibleToUser) { //play your video } } }