我在我的应用程序中使用tabhost,其中3个选项卡与3个不同的活动相关联。在每个活动中,我需要添加一个片段(该片段包含一个从网络播放视频的视频播放器)。下面是添加片段的活动代码。
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个预期的选项卡。但是,当我尝试使用此实现时,该应用程序根本没有运行。
电影活动是从mainactivity调用的,它创建了一个tabhost。因此,电影活动的观点应该转到android.R.id.tabcontent
。我添加片段时应该使用它吗?
答案 0 :(得分:2)
我解决了问题。我不得不延长FragmentActivity
而不是Activity
。