2

Это фрагмент, отображающий видео.Lifecycle при вызове фрагмента заменить или открыть новую активность?

Этот фрагмент может либо

1) открыть новый вид деятельности на кнопку мыши

2) заменить с другим фрагментом, вызвав

fragmentManager.beginTransaction().replace(R.id.container, f).addToBackStack(tag).commit(); 

для) случая 1, я хотел бы звоните player.stopPlayBack(), чтобы остановить воспроизведение видео при поддержке

И для 2) случая, я хотел бы позвонить player.stopPlayBack() и player.release() прекратить проигрыватель

Проблема в том, какое событие я должен назвать для случая 1) и 2)? Я пытаюсь использовать onPause или onStop, но оба они, похоже, не стреляли.

Как это исправить?

Большое спасибо за помощь.

Обновлено:

видео фрагмент код

public class Video extends Fragment implements MediaPlayer.OnPreparedListener { 
    @Bind(R.id.player) EMVideoView player; 
    @Bind(R.id.full_screen) ImageView full_screen; 
    Context ctx; 
    MyApp app; 
    String video_url; 
    int intent_code = 5545; 
    int pos; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.video, container, false); 
     ButterKnife.bind(this, view); 

     Bundle bundle = this.getArguments(); 
     video_url = bundle.getString("video_url"); 
     String id = bundle.getString("id"); 

     app = (MyApp) getActivity().getApplicationContext(); 
     app.record_view(id); 

     Main m = (Main)getActivity(); 
     m.toggle_upload_btn(false); 

     pos = 0; 

     full_screen.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getActivity(), VideoFullScreen.class); 
       i.putExtra("video_url", video_url); 
       i.putExtra("time", (int) player.getCurrentPosition()); 
       startActivityForResult(i, intent_code); //random intent number 
      } 
     }); 

     return view; 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 
     player.seekTo(pos); 
     player.start(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     player.setOnPreparedListener(this); 
     player.setVideoURI(Uri.parse(video_url)); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     player.stopPlayback(); 
     //player.release(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == intent_code) { 
      if(resultCode == Activity.RESULT_OK){ 
       pos = data.getIntExtra("time", 0); 
      } 
     } 
    } 
+0

Есть две кнопки, одна для корпуса 1 и одна для корпуса 2? Почему бы не обрабатывать ваши разные случаи в их соответствующих onClickListeners, если так? –

+0

просто читает документ и имеет некоторую идею, является onpause для 1) случая и onDetach для 2) случая? – user3538235

ответ

8

Когда фрагмент добавляется в backstack, а затем получить заменены или удалены - он будет идти, как это:

onPause() -> onSaveInstanceState() -> onStop() -> onDestroyView() 

Если фрагмент ЛОР удален, или заменен без получения добавлены к задней стеке, то происходит следующее:

onPause() -> onSaveInstanceState() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach() -> Fragment is destroyed. 

И когда активность начинает другую активность (source):

Порядок жизненного цикла обратных вызовов хорошо определен , особенно когда два вида деятельности находятся в одном и том же процессе, а один запускает другой. Ниже приведен порядок операций, которые происходят при запуске Activity A Acivity B:

Выполняется операция OnPause(). Действия B onCreate(), onStart() и onResume() выполняются последовательно. (В действии B теперь имеет фокус пользователя.) Затем, если Activity A больше не отображается на экране, его метод onStop() выполняется.

Потому что вам нужно вызвать свою деятельность, где существует ваш фрагмент, чтобы начать новую деятельность.

+0

означает, что либо фрагмент, создающий новую активность, либо заменяющий фрагмент, перейдет через одно и то же событие? – user3538235

+1

Да, поэтому вы не должны контролировать воспроизведение этого конкретного случая в своих жизненных циклах. –

+0

Спасибо за ответ. Кроме того, я заявил, что video.stopplayback() на onStop, и когда я использую замену фрагмента, видео не останавливается и продолжает воспроизведение, поэтому, если я заменю больше фрагмента, то больше видеоигра в одно и то же время, любая идея исправить это? спасибо – user3538235

Смежные вопросы