Медиаплеер не останавливается при переключении фрагмента - PullRequest
0 голосов
/ 22 декабря 2018

Я новичок в Android Studio.Пожалуйста помоги.У меня есть приложение с 3 фрагментами, у одного есть список просмотра видео с помощью адаптера вторичной переработки, у одного есть список просмотра изображения, у другого такой же список просмотра видео, как у 1 фрагмента.Первый и последний фрагмент используют один и тот же адаптер.Проблема в том, что при переключении фрагмента с первого на второе видео продолжает воспроизводиться.

 //fragment code
 public class funny_moments extends Fragment {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("funnymomments");
 ArrayList<funny_momments_row> data;
 funny_momments_adapter adapter;
 VideoView mVideoView;
 View pos;

private RecyclerView mRecyclerView;
public funny_moments() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_funny_moments, container, false);
    mRecyclerView =(RecyclerView) view.findViewById(R.id.recylerview);
    mVideoView = (VideoView)view.findViewById(R.id.videoView);

    data = new ArrayList<>();
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot videoSnapshot : dataSnapshot.getChildren()){
                funny_momments_row video = new funny_momments_row(videoSnapshot.child("like").getValue().toString(),videoSnapshot.child("url").getValue().toString());

                data.add(video);

            }

           adapter = new funny_momments_adapter(getActivity(),data,mCommunication);
            mRecyclerView.setAdapter(adapter);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }

    });



    // Inflate the layout for this fragment
    return view;
}
  @Override
public void onPause() {
    adapter.mMediaPlayer.pause();
    super.onPause();

}


//adapter code
 public class funny_momments_adapter extends RecyclerView.Adapter<funny_momments_adapter.funnyVideoHolder> {
private final LayoutInflater inflator;
List<funny_momments_row> data = Collections.emptyList();
communication mCommunicator;
Context mContext;



public funny_momments_adapter(Context context, List<funny_momments_row> data, communication communicator){

    inflator = LayoutInflater.from(context);
    this.data = data;
    this.mContext = context;
    mCommunicator = communicator;
}
@NonNull
@Override
public funnyVideoHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = inflator.inflate(R.layout.funny_momments_row,viewGroup,false);
        funnyVideoHolder funnyHolder = new funnyVideoHolder(view,mCommunicator);
    return funnyHolder;
}

@Override
public void onBindViewHolder(@NonNull final funnyVideoHolder viewHolder, int i) {

    funny_momments_row current = data.get(i);
    VideoView f1 = viewHolder.mVideoView;
    viewHolder.mVideoView.setVideoURI(Uri.parse(current.getUrl()));

    viewHolder.likecount.setText(current.getLike());

    viewHolder.mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(final MediaPlayer mp) {
            FragmentManager manager = ((AppCompatActivity)mContext).getSupportFragmentManager();
            Fragment f = manager.findFragmentByTag("android:switcher:" + R.id.viewPager + ":" + 2);

            mMediaPlayer = mp;

            viewHolder.playpause.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mp.isPlaying()) {
                        mp.pause();
                    }
                    else {
                        mp.start();
                    }
                }
            });
        }
    });

    viewHolder.playpause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (viewHolder.mVideoView.isPlaying()) {
                viewHolder.mVideoView.requestFocus();
                viewHolder.mVideoView.pause();
            }
            else {
                viewHolder.mVideoView.requestFocus();
                viewHolder.mVideoView.start();
            }
        }
    });


}



@Override
public int getItemCount() {
    return data.size();
}

   public class funnyVideoHolder extends  RecyclerView.ViewHolder implements View.OnClickListener{

    VideoView mVideoView;
    ImageView likeicon;
    TextView likecount;
    ImageView playpause;
    communication mCommunication;
    public funnyVideoHolder(@NonNull View itemView,communication communication) {
        super(itemView);
        mVideoView = (VideoView)itemView.findViewById(R.id.videoView);
        likeicon = (ImageView)itemView.findViewById(R.id.likeicon);
        likecount = (TextView)itemView.findViewById(R.id.likecount);
        playpause = (ImageView)itemView.findViewById(R.id.playpause);
        mCommunication = communication;

    }

   @Override
   public void onClick(View v) {
        mCommunication.respond(v);
   }

}}

Я хочу остановить воспроизведение при переключении фрагмента.

1 Ответ

0 голосов
/ 22 декабря 2018

При фрагментации от одного фрагмента к другому вызывается onPause() предыдущего фрагмента (что дает вам возможность приостановить видео) и вызывается функция onResume() нового фрагмента.Если новый фрагмент еще не был создан, перед вызовом onResume() вызывается метод onStart, onCreate() и т. Д.

Что вы можете сделать, когда фрагмент выходит из фокуса, что называется onPause(), приостановите видео, и когда фрагмент окажется в фокусе, вы сможете возобновить его, если он уже был создан.

Жизненный цикл фрагмента ( источник ) Fragment Lifecycle

...