Видео не приостанавливается в фрагменте ViewPager

Я использую View Pager с фрагментом для показа изображения и видео, я могу показывать изображение и видео должным образом, но у меня есть проблема, когда я сажусь за видео, затем воспроизводится видео, но я прокручиваю следующий или предыдущий, после чего видео все еще воспроизводится Просто следующий или предыдущий экран, но когда я перемещаю два слайда рядом или раньше, тогда видео останавливается, но почему бы не продолжить следующий или предыдущий слайд.

Я ищу его больше, но я не получил никакого решения, любая помощь будет заметна. Заранее спасибо.

Вот мой код:

Это класс фрагментов

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()); } } } 

Solutions Collecting From Web of "Видео не приостанавливается в фрагменте ViewPager"

Это происходит из-за ViewPager что ViewPager сохраняет ViewPager фрагменты ViewPager . Например, у вас есть фрагмент, видимый пользователю. ViewPager попытается сохранить предыдущий фрагмент (с левой стороны) и начать следующий фрагмент (справа). Это позволяет ViewPager выполнять плавное скольжение, когда пользователь решает изменить страницу, потому что следующая и предыдущие страницы уже подготовлены.

В вашем случае видеопроигрыватель не отображается (за кадром), но ViewPager поддерживает его, как из-за описанного выше поведения. Вы можете использовать метод setOffscreenPageLimit (), чтобы изменить это поведение. Если вы установите предел страницы равным 0 , то осколочные фрагменты будут немедленно приостановлены. К сожалению, они не только будут приостановлены, но и остановлены и отстранены от деятельности. Это означает, что когда вы вернетесь назад к своему фрагменту, он заново заново создаст весь макет. Вот почему вы можете попытаться переопределить Fragment.setUserVisibleHint() или Fragment.onHiddenChanged() и выполнить свою логику приостановки / воспроизведения. ViewPager обновит скрытое состояние фрагмента в зависимости от того, действительно ли фрагмент отображается пользователю или нет.

Надеюсь это поможет.

Вы должны переопределить метод setUserVisibleHint в фрагменте, где u воспроизводит видео.

 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 } } }