【问题标题】:Fragments inside TabHost ActivitiesTabHost 活动中的片段
【发布时间】:2011-06-21 17:54:30
【问题描述】:

我在我的应用程序中使用了一个 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 个选项卡的屏幕。但是,当我尝试使用此实现运行时,应用程序根本没有运行。

电影活动是从创建标签主机的主要活动中调用的。因此,电影活动的视图应该转到android.R.id.tabcontent。我应该在添加片段时使用它吗?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    我已经解决了这个问题。我不得不扩展 FragmentActivity 而不是 Activity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多