0

我正在使用蜂窝 3.1 开发 Galaxy Tab 10.1 应用程序,我在右侧的片段中有一个视频视图和媒体控制器。我在 Layout 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();
    }
}

但是在运行这个应用程序时,会发生

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

我试图解决这个错误一整天,但我不明白为什么。actullay 没有足够的信息。有没有人知道我做错了什么?或有解决方案?请告诉我。

谢谢。

4

2 回答 2

3

抱歉,您应该以编程方式实例化它,而不是在 XML 中定义 MediaController(请参阅文档):

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 回答