【问题标题】:How to show second fragment from first fragment with in a single activity如何在单个活动中显示来自第一个片段的第二个片段
【发布时间】:2013-04-09 08:54:39
【问题描述】:

我正在开发一个仅适用于平板电脑并使用 android 4.0 的简单 android 应用程序。我的应用程序的主屏幕如下:

主活动的 Oncreate() 我正在使用以下代码在 main.xml 中添加片段 A:

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment imageFragment = new ImageFragment();
ft.replace(R.id.fragment_container, imageFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

这个片段 A 只有一个可点击的图像视图。现在我希望当用户单击图像视图时,应该调用另一个片段(片段 B)并替换图像视图。 Fragment B 有一个 VideoView 播放视频。

所以我的第二个屏幕应该如下所示:

我的问题是我没有得到“如何在主屏幕活动中调用第一个片段的第二个片段?”

我可以使用不同的活动,但我不想这样做,只想使用片段来运行它。

请指导我。

【问题讨论】:

    标签: android android-layout android-widget android-fragments android-fragmentactivity


    【解决方案1】:

    这是最简单的方法:

    1) 在YourActivity里面创建一个方法:

    public void goToSecondFragment(){}
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment secondFragment = new SecondFragment();
        ft.replace(R.id.fragment_container, secondFragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();
    }
    

    2) 在你的第一个片段中,当你想替换它时,调用:

    YourActivity activity = (YourActivity) getActivity();
    activity.goToSecondFragment();
    

    【讨论】:

    • 感谢 rciovati。这对我来说很好,我可以进入第二个片段。但正如我提到的第二个片段有 VideoView 并播放视频,但我的视频没有播放。它正在显示带有“视频无法播放”消息的对话框。我正在使用以下代码-VideoView videoView = (VideoView) view.findViewById(R.id.main_video); videoView.setVideoURI(Uri.parse("android.resource://"+ getActivity().getPackageName() + "/" + R.raw.myvideo)); videoView.setMediaController(new MediaController(getActivity())); videoView.start();请指导我。
    • 抱歉,我没有使用 VideoView 的经验。我建议你问另一个问题,包括 logcat 输出 :)
    【解决方案2】:

    你可以使用下面的方法来做同样的事情:

    添加片段并维护回栈

    FragmentManager supportFragmentManager = getSupportFragmentManager();
    supportFragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
    }
    }); 
    FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    fragmentTransaction.addToBackStack("fragmentTag");
    fragmentTransaction.replace(R.id.slate, fragment, "fragmentTag");
    fragmentTransaction.commit();
    

    并替换片段

    FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    fragmentTransaction.replace(R.id.slate, fragment, "fragmentTag");
    fragmentTransaction.commit();
    

    应该适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多