El video no se detiene en el fragmento ViewPager

Estoy usando View Pager con fragmento para mostrar la imagen y el video, puedo mostrar la imagen y el video correctamente, pero tengo problemas, cuando hago un swipe de vídeo, entonces el video está jugando, pero me paseo siguiente o anterior entonces el video sigue jugando Justo en la pantalla siguiente o anterior, pero cuando me muevo dos diapositivas siguiente o anterior, entonces el video se está deteniendo, pero ¿por qué no en la diapositiva siguiente o anterior.

Lo busco más, pero no obtuve ninguna solución, cualquier ayuda será apreciable. Gracias por adelantado.

Aquí está mi código:

Esta es la clase de fragmento

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

Esta es la actividad del adaptador de buscapersonas

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

Esto se debe a que ViewPager mantiene fragmentos de pantalla iniciada. Por ejemplo, tiene un fragmento visible para el usuario. ViewPager intentará mantener el fragmento anterior (en el lado izquierdo) y el fragmento siguiente (en el lado derecho) iniciado. Esto permite a ViewPager realizar un deslizamiento suave cuando el usuario decide cambiar la página, ya que las páginas siguientes y anteriores ya están preparadas.

En su caso, el reproductor de video no está visible (fuera de pantalla), pero ViewPager mantiene iniciado debido al comportamiento descrito anteriormente. Puede utilizar el método setOffscreenPageLimit () para cambiar este comportamiento. Si establece el límite de página en 0 , los fragmentos de pantalla externa se detendrán inmediatamente. Por desgracia, no sólo se detendrá, sino que se detendrá y se separará de la actividad también. Esto significa que cuando regresa a su fragmento, volverá a crear el diseño completo nuevamente. Es por eso que puede intentar anular Fragment.setUserVisibleHint() o Fragment.onHiddenChanged() y ejecutar la lógica de pausa / reproducción allí. ViewPager actualizará el estado oculto de un fragmento dependiendo de si el fragmento es realmente visible para el usuario o no.

Espero que esto ayude.

Usted tiene que sobreescribir el método setUserVisibleHint en un fragmento donde u reproducir vídeo.

 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 } } } 
  • Androide: estira la imagen en la vista de la imagen para que se ajuste a la pantalla
  • Android - Dos imágenes vistas lado a lado
  • Hacer una imagen a pantalla completa en la aplicación de tutorial para Android
  • Cómo agregar una sombra y un borde en circular imageView android?
  • SetImageBitmap no tiene efecto visible
  • Obtener imagen asociada (Drawable) en ImageView android
  • Cómo rotar la imagen en imageview en el botón haga clic en cada vez?
  • ¿Por qué no establece CircleImageView de android support v4 library public?
  • Ampliación de ImageView TOP_CROP
  • Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas
  • ¿Por qué el ImageView no está en pantalla completa?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.