2013-11-30 1 views
4

У меня проблема с mediacontroller; мое приложение должно иметь несколько вкладок с этой структурой:Отображается медиа-контроллер, отображающийся в неправильных фрагментах и ​​начиная с вкладки.

  • TAB1: ImageView
  • TAB2: MediaController
  • TAB3: ImageView
  • tab4: ImageView

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ: Заявка начинается с просмотра изображения в TAB1 (видео не должно воспроизводиться); когда я сажусь в TAB2, воспроизведение должно начинаться. Если я переключусь на другую вкладку, воспроизведение должно прекратиться.

АКТУАЛЬНЫЙ РЕЗУЛЬТАТ: MediaController появляется в TAB1, TAB2, TAB3, и воспроизведение начинается, когда загружается основная активность. Если я перейду к TAB4, mediacontroller и воспроизведение будут уничтожены, но снова появятся, если я вернусь к TAB3.

Это, как я реализовать фрагмент с MediaController:

public class FragMpOnly0 extends Fragment { 
    /** 
    * The fragment argument representing the section number for this fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 
    private VideoView videoView; 
    private MediaController ctrl; 

    public FragMpOnly0() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_mponly0, container, 
       false); 

     // Inizializzazione controllo e playback video 
     videoView = (VideoView) rootView.findViewById(R.id.videoView1); 

     // ctrl = new MediaController(this.getActivity()); 
     ctrl = new MediaController(getActivity()); 
     ctrl.setAnchorView(videoView); 
     ctrl.setMediaPlayer(videoView); 
     return rootView; 
    } 

    private void playVideo() 

    { 
     // location of the android resource 
     Uri uri = Uri.parse("android.resource://" 
       + getActivity().getApplication().getPackageName() + "/" 
       + R.raw.myvideotoplay); 

     // Attach a media controller to the video view 
     videoView.setMediaController(ctrl); 
     videoView.requestFocus(); 
     videoView.setVideoURI(uri); 

     ctrl.show(); 
     videoView.start(); // play video 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     playVideo(); 
    } 

    /** Stop playback of the video and release resources */ 
    @Override 
    public void onPause() { 
     super.onPause(); 
     videoView.pause(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     videoView.stopPlayback(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     videoView.suspend(); 
     videoView = null; 
    } 

} 

Это XML-файл, связанный с фрагментом с VideoView/MediaController:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/FrameLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity$DummySectionFragment0" > 

<VideoView 
    android:id="@+id/videoView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:clickable="true" /> 

</FrameLayout> 

ответ

3

Одним из решений может быть быть чтобы реализовать то, что предложено на этом this topic, следуя рекомендациям переопределить метод setUserVisibleHint().

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