2012-04-20 12 views
0

ハニカム3.1を使用してGalaxy Tab 10.1アプリを開発しています。右側にはvideoviewとmediacontrollerがあります。 VideoViewとMediaControllerをLayout xmlファイルで定義し、関連するjavaファイルでインスタンス化して操作しました。NullPointerException VideoView and MediaController on Fragment on 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(); 
    } 
} 

を下回っている。しかし、このアプリを実行している間、 android.widgetと

にNullPointerExceptionが発生しています.MediaController.show(MediaController.java:305)

私はこのエラーを1日中解決しようとしましたが、その理由を知ることができません。このための情報が十分ではありません。 どのような体が何をしたのか分かりますか?またはソリューションを持っている? お知らせください。

ありがとうございました。

答えて

3

申し訳ありませんが、代わりにXMLでのMediaControllerを定義する、あなたは(the docsを参照)プログラム的にそれをインスタンス化する必要があります。その後、

mController = new MediaController(getActivity()); 

と取り付けそれはVideoViewに:

mVideo.setMediaController(mController); 

私ができる限りつまり、mController.setMediaPlayer(mVideo);を追加することは、setMediaControllerの呼び出しがそれを同様に処理するように見えるので、無意味です。

+0

あなたの答えをありがとうが、私はあなたのコードを試していた。私が望むのは、MideaControllerが同じ断片に表示されているということです。あなたのコード、ハニカムはメインディスプレイの下部と中央にMediaControllerを表示します。 –

+0

@diveto次に、mControllerでsetAnchorView(ビュービュー)を呼び出してみます。 – yydl

+1

実際には、mediacontrollerクラスに基づいたコントローラのようなmediacontrollerを実装し、それをフラグメントに配置しました。だから、私はそれを解決した。とにかくあなたの答えに感謝します。 :) –

0

変更静的クラスにContentFragmentクラス:

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

「ContentFragment」を内部クラスとして宣言していないと、私は考えていません。 – Sufian