2011-06-21 214 views
0

我在我的应用程序中使用了3个与3个不同活动关联的选项卡中的tabhost。在每个活动中,我需要添加一个片段(该片段包含一个播放来自网络的视频的视频播放器)。以下是添加片段的活动的代码。TabHost活动中的碎片

 


    public class FilmsActivity extends Activity { 

     @SuppressWarnings("unused") 
     private static final String TAG = "FilmsActivity"; 

     private static FragmentManager mFragmentManager; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Log.i(TAG, "Films onCreate "); 
      mFragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
      // get a video fragment. Title and URI as the constructor arguments 
      VideoViewer vvFragment = VideoViewer.newInstance("Testing",Uri.parse("http://daily3gp.com/vids/747.3gp")); 
      Log.i(TAG, "Films onCreate 1"); 
      VideoViewer vvFragment = VideoViewer.newInstance("Testing",Uri.parse("/sdcard/family_guy_test.3gp")); 
      Log.i(TAG, "Films onCreate 2"); 
      fragmentTransaction.add(android.R.id.tabcontent, vvFragment, "videoFragment"); 
      Log.i(TAG, "Films onCreate 3"); 
      fragmentTransaction.commit(); 
     } 
    } 

该片段实现,如下所示。

 


     public class VideoViewer extends Fragment { 
     // Debug vars 
     @SuppressWarnings("unused") 
     private static final String TAG = "VideoViewer"; 
     private static final Boolean DBG_TOAST = false; 
     private static final Boolean DBG_LOG = false; 

     // Video Title, URL of the Video will be unique for each video. Save it in a member variable. 
     private static final String VIDEO_TITLE = "title"; 
     private static final String VIDEO_URI = "uri"; 
     // Different states of the video viewer 
     private static final int STATE_PAUSED = 0; 
     private static final int STATE_PLAYING = 1; 
     private static final int STATE_STOPPED = 2; 
     // The view which holds the video player 
     private VideoView mVideoView; 
     // The transparent layout above the video which will be shown when it is paused and made not 
     // visible when the video is playing 
     // The title of the video is in the textview 
     private TextView mVideoTitle; 
     // UI Control Elements from the view. 
     private ImageButton mPlayPauseButton; 
     private Button mShareButton; 
     private Button mAddToFavourites; 
     // This holds the current state of the Video Viewer 
     private int mVideoState; 

     public static VideoViewer newInstance(String VideoTitle, Uri VideoUri) { 
      VideoViewer VV = new VideoViewer(); 
      Bundle args = new Bundle(); 
      // Put the title and the uri in the bundle 
      args.putString(VIDEO_TITLE, VideoTitle); 
      args.putString(VIDEO_URI, VideoUri.toString()); 
      // Later on convert the string to Uri using uri.parse(string) 
      return VV; 
     } 

     /* Return the view that is used by the fragment */ 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      // Check if you want to use container or don't want to use anything 
      return inflater.inflate(R.layout.fragment_video_viewer, null); 
     } 

     /* 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); 
      mVideoTitle = (TextView) getView().findViewById(R.id.fragment_video_viewer_title); 
      // Use the video title as the Text in the TextView 
      mVideoTitle.setText(getArguments().getString(VIDEO_TITLE)); 
      // Get the URL from the argument bundle 
      Uri videoUri = Uri.parse(getArguments().getString(VIDEO_URI)); 
      videoUri = Uri.parse("http://daily3gp.com/vids/747.3gp"); 
      // Toast if the URI is null 
      if(DBG_TOAST) { 
       if (videoUri.toString() == "") { 
        // Tell the user to provide a media file URL/path. 
        Toast.makeText(getActivity().getApplicationContext(), "Uri is null", Toast.LENGTH_LONG).show(); 
        // Use a default video 
        // videoUri = Uri.parse("http://daily3gp.com/vids/747.3gp"); 
       } 
      } 
      // Initialize a media controller and anchor the videoview to it 
      MediaController mediaController = new MediaController(getActivity().getApplicationContext()); 
      mediaController.setAnchorView(mVideoView); 

      mVideoView.setMediaController(mediaController); 
      mVideoView.requestFocus(); 
      mVideoView.setVideoURI(videoUri); 
      mVideoView.start(); 
     } 
    } 

 

有人可以告诉我什么是错误的实施?如预期的那样,一个空的Films活动会产生一个带有3个选项卡的屏幕但是,当我尝试运行此实现时,该应用程序根本没有运行。

电影活动从创建tabhost的mainactivity中调用。所以,电影活动的观点应该是android.R.id.tabcontent。我应该在添加片段时使用它吗?

回答

2

我解决了问题。我不得不延长FragmentActivity而不是Activity