如何在单个活动中显示第一个片段的第二个片段

时间:2013-04-09 08:54:40

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

我正在为平板电脑和使用Android 4.0开发一个简单的Android应用程序。我的应用程序的主屏幕如下:

enter image description here

主要活动的Oncreate()我使用以下代码在main.xml中添加Fragment 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)应该调用并替换图像视图。片段B有一个播放视频的VideoView。

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

enter image description here

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

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

请指导我。

2 个答案:

答案 0 :(得分:4)

这是最简单的方法:

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();

答案 1 :(得分:0)

您可以使用以下方式执行相同操作:

添加片段并维护后栈

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();

应该适合你。