2011-06-21 212 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