2011-06-22 18 views
8

VideoViewerフラグメントを作成しようとしています。以下は私が試した2つのケースと観察です。どちらの場合もフラグメントのビューには、次のレイアウトから膨張さ:メディアコントローラなしVideoView - 正常に動作します: 奇妙な動作 - VideoViewerフラグメントがMediaControllerで機能しない

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center"> 

<VideoView android:id="@+id/fragment_video_viewer_video" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" /> 
</RelativeLayout> 

ケース1。 -アプリのクラッシュ私はVideoViewに触れるメディアコントローラとVideoView:以下は

/* Initialize the variables here, retrieve views and */ 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    // Assignment for the local variables 
    mVideoView = (VideoView) getView().findViewById(R.id.fragment_video_viewer_video); 
    mVideoView.setVideoPath("/sdcard/family_guy_test.3gp");//(videoUri); 
    mVideoView.requestFocus(); 
    mVideoView.start(); 
} 

ケース2 onActivityCreatedメソッドのコードです。問題は、私があったコンテキストで実際にあったことを、私は考え出し

WARN/WindowManager(124): Failed looking up window 
WARN/WindowManager(124): java.lang.IllegalArgumentException: Requested window null does not exist 
WARN/WindowManager(124):  at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:9398) 
WARN/WindowManager(124):  at com.android.server.WindowManagerService.addWindow(WindowManagerService.java:1906) 
WARN/WindowManager(124):  at com.android.server.WindowManagerService$Session.add(WindowManagerService.java:6876) 
WARN/WindowManager(124):  at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:66) 
WARN/WindowManager(124):  at com.android.server.WindowManagerService$Session.onTransact(WindowManagerService.java:6848) 
WARN/WindowManager(124):  at android.os.Binder.execTransact(Binder.java:288) 
WARN/WindowManager(124):  at dalvik.system.NativeStart.run(Native Method) 
WARN/WindowManager(124): Attempted to add window with token that is not a window: null. Aborting. 
WARN/dalvikvm(8144): threadid=1: thread exiting with uncaught exception (group=0x400287f0) 
ERROR/AndroidRuntime(8144): FATAL EXCEPTION: main 
ERROR/AndroidRuntime(8144): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 
ERROR/AndroidRuntime(8144):  at android.view.ViewRoot.setView(ViewRoot.java:505) 
ERROR/AndroidRuntime(8144):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
ERROR/AndroidRuntime(8144):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
ERROR/AndroidRuntime(8144):  at android.widget.MediaController.show(MediaController.java:304) 
ERROR/AndroidRuntime(8144):  at android.widget.MediaController.show(MediaController.java:249) 
ERROR/AndroidRuntime(8144):  at android.widget.VideoView.toggleMediaControlsVisiblity(VideoView.java:567) 
ERROR/AndroidRuntime(8144):  at android.widget.VideoView.onTouchEvent(VideoView.java:518) 
ERROR/AndroidRuntime(8144):  at android.view.View.dispatchTouchEvent(View.java:3766) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
ERROR/AndroidRuntime(8144):  at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
ERROR/AndroidRuntime(8144):  at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 
ERROR/AndroidRuntime(8144):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) 
ERROR/AndroidRuntime(8144):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785) 
ERROR/AndroidRuntime(8144):  at android.os.Handler.dispatchMessage(Handler.java:99) 
ERROR/AndroidRuntime(8144):  at android.os.Looper.loop(Looper.java:123) 
ERROR/AndroidRuntime(8144):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
ERROR/AndroidRuntime(8144):  at java.lang.reflect.Method.invokeNative(Native Method) 
ERROR/AndroidRuntime(8144):  at java.lang.reflect.Method.invoke(Method.java:521) 
ERROR/AndroidRuntime(8144):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
ERROR/AndroidRuntime(8144):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
ERROR/AndroidRuntime(8144):  at dalvik.system.NativeStart.main(Native Method) 
WARN/ActivityManager(124): Force finishing activity com.comp.ias/.MainActivity 
WARN/ActivityManager(124): Activity pause timeout for HistoryRecord{43f755b0 com.comp.ias/.MainActivity} 
WARN/WindowManager(124): No window to dispatch pointer action 1 

答えて

22

:以下logcat出力を以下に示す。

/* Initialize the variables here, retrieve views and */ 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    // Assignment for the local variables 
    mVideoView = (VideoView) getView().findViewById(R.id.fragment_video_viewer_video); 
    mVideoView.setVideoPath("/sdcard/family_guy_test.3gp");//(videoUri); 
    MediaController mediaController = new MediaController(getActivity().getApplicationContext()); 
    mediaController.setAnchorView(mVideoView); 
    mVideoView.setMediaController(mediaController); 
    mVideoView.requestFocus(); 
} 

onActivityCreatedメソッドのコードでありますを使用して。私は、アプリケーションコンテキストの代わりにActivityコンテキストを使用しなければなりませんでした。具体的には、次のようにしなければなりませんでした。

MediaController mediaController = new MediaController(getActivity()); 

どのコンテキストを使用するかについてのドキュメントは非常にまばらです。場合によっては、コンテキストのいずれかを使用することができます。場合によっては、特定のコンテキストを使用する必要があります。私は、コンテキストの使用の背後にある直感は、 "クラスのインスタンスがアクティビティにバインドされている場合はアクティビティコンテキストを使用し、それ以外の場合はアプリケーションコンテキストを使用する"ということです。

+0

これは問題でしたが、私はあなたに質問があります:私は同じことをやろうとしていますが、問題はMediaControllerのボタンが何のアクションもしないので、一時停止/ストリーミングクリップを巻き戻しますか?これはあなたにも起こったのですか、あるいは私が紛失しているかもしれないものがありますか?私は互換性パックのフラグメントを使用しています - それは考えられる原因ですか? – r1k0

+0

このエラーのため、私はほとんど夢中になります。ありがとう@ 500865。 – mertaydin

+0

@ 500865あなたのご意見ありがとうございました。私の意見では、Androidの最悪の部分はコンテキスト/アクティビティです。場合によっては、関数にContextパラメータがありますが、実際にはActivityが必要です。 – Qylin