0

私はハニカム3.1を使用してGalaxyTab10.1アプリを開発していますが、右側にビデオビューとメディアコントローラーが断片化されています。レイアウトxmlファイルでVideoViewとMediaControllerを定義し、関連するJavaファイルでそれらをインスタンス化して操作しました。

皆さんが知っているように、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.MediaController.show(MediaController.java:305)でのNullPointerException

私はこのエラーを一日中解決しようとしましたが、理由がわかりません。actullayこれについては十分な情報がありません。私が間違ったことを知っている体はありますか?または解決策がありますか?私にお知らせください。

ありがとう。

4

2 に答える 2

3

申し訳ありませんが、MediaControllerをXMLで定義する代わりに、プログラムでインスタンス化する必要があります(ドキュメントを参照)。

mController = new MediaController(getActivity());

そして、それをVideoViewにアタッチします。

mVideo.setMediaController(mController);

また、私が知る限り、mController.setMediaPlayer(mVideo);setMediaControllerの呼び出しもそれを処理しているように見えるので、追加しても意味がありません。

于 2012-04-20T06:31:15.943 に答える
0

ContentFragmentクラスを静的クラスに変更します。

public static class ContentFragment extends Fragment { 
    [...]
}
于 2012-04-20T06:22:26.990 に答える