0

Я разрабатываю приложение Galaxy Tab 10.1 с помощью сотовой версии 3.1, и у меня есть видеообзор и медиантроллер с фрагментом справа. Я определил VideoView и MediaController в XML-файле Layout и создаю и обрабатываю их в соответствующем Java-файле.NullPointerException VideoView и MediaController на фрагменте в android

Как вы, ребята, в файле java, я установил контроллер VideoView в MediaController и установил медиаплеер MediaController в VideoView, который я определил.

Ниже раскладка фрагмент XML-файл

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <VideoView 
     android:id="@+id/video" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <MediaController 
     android:id="@+id/controller" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" /> 
</LinearLayout> 

и файл Java код ниже

public class ContentFragment extends Fragment { 
    private VideoView mVideo; 
    private MediaController mController; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.content, null); 
     mVideo = (VideoView)view.findViewById(R.id.video); 
     mController = (MediaController)view.findViewById(R.id.controller); 
     mVideo.setMediaController(mController); 
     mController.setMediaPlayer(mVideo); 

     return view; 
    } 

    public void playVideo(String path) { 
     mVideo.setVideoPath(path); 
     mVideo.requestFocus(); 
    } 
} 

Но во время работы этого приложения, происходит

NullPointerException с android.widget .MediaController.show (MediaController.java:305)

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

Спасибо.

ответ

3

Извините, но вместо определения MediaController в XML, вы должны создать его экземпляр программно (см the docs):

mController = new MediaController(getActivity()); 

А затем прикрепить это к VideoView:

mVideo.setMediaController(mController); 

Кроме того, насколько я могу скажем, добавление mController.setMediaPlayer(mVideo); бессмысленно, поскольку вызов setMediaController, похоже, позаботится об этом.

+0

Благодарю вас за ответ, но я попробовал ваш код. то, что я хочу, MideaController отображается на том же фрагменте. ваш код, сотовые дисплеи MediaController на нижней и центральной горизонтали основного дисплея. –

+0

@diveto Затем попробуйте вызвать setAnchorView (View view) на mController. – yydl

+1

Фактически, я реализовал контроллер mediacontroller как контроллер на основе класса mediacontroller и поместил его в фрагмент. поэтому я решил это. в любом случае спасибо за ваш ответ. :) –

0

Изменить класс ContentFragment к статическому классу:

public static class ContentFragment extends Fragment { 
    [...] 
}
+0

Я не думаю, что это даже возможно, если он не объявлен «ContentFragment» как внутренний класс. – Sufian