如何使用PagerAdapter替换ViewPager中的Fragment?

时间:2013-09-11 15:40:21

标签: android replace android-fragments android-viewpager fragmentpageradapter

我的问题

我使用ViewPagerFragmentActivity内显示片段。 ViewPager从附加的FragmentPagerAdapter获取片段。

mViewPager = (ViewPager) findViewById(R.id.view_pager);       
mAdapter = new HomePagerAdapter(getSupportFragmentManager());    
mViewPager.setAdapter(mAdapter);

假设ViewPager有3个要显示的片段:Fragment1Fragment2Fragment3Fragment1是网格片段并显示网格。 Fragment2Fragment3有自己的内容可供展示。 当用户在屏幕上滑动时,ViewPager将显示下一个片段 - Fragment2。等等。

我想要什么?

我想要的是,当点击网格中的项目(由Fragment1显示)时,Fragment1应该被其他一些片段完全替换,比如说Fragment4(这是不同的片段,并不是由附加的适配器返回)。用户将在Fragment4上工作,在ButtonBack点击后(只需按下Fragment4按钮),应再次显示带有网格的Fragment1。同时ViewPager应该表现相同,即在滑动时,将显示下一个片段(在我们的例子中为Fragment2)。

所以我只想获得与示例中相同的行为: http://developer.android.com/training/basics/fragments/fragment-ui.html#Replace

我的问题

那么,这有可能实现吗?如果是,那该怎么办? 我非常感谢你的帮助。亚历克斯。 附:对不起我的英文:)

3 个答案:

答案 0 :(得分:16)

我做了一个小例子来说明如何实现它:

https://github.com/danilao/fragments-viewpager-example

我认为重点是将另一个片段用作容器。

答案 1 :(得分:0)

您必须执行片段事务并将现有片段添加到backstack中。 我创建了一个示例项目来向您展示如何操作。

代码未经过微调,我只是创建它以向您展示如何操作。

https://drive.google.com/folderview?id=0BxHClVwHSqq5dVRvT1Qyd0hYN0k&usp=sharing

但请注意,即使您在任何一个视图寻呼机屏幕上按回,前一个片段也会显示为同一个活动。

如果这不是预期的行为,那么您应该考虑改为使用多个活动(如标签布局)

答案 2 :(得分:0)

实现此目标的一种方法是添加另一个FragmentActivity来显示您的Fragment4。使用Intent开始此活动,并在Extra中发送网格项位置或其他数据。

按下后退按钮后,此活动将完成,并将显示带有查看寻呼机的最后一项活动。

[编辑]旧回应。其他答案中提供了更好的解决方案,