我有3个活动要转换成片段,以便我可以实现ViewPager在它们之间滑动:
从外部活动调用活动B,并在Intent中将数据传递给它。现在,活动B在意图内将数据传递给活动A和C。这里的想法是B显示带有ImageView的幻灯片,每隔X秒更新一次,A和C显示有关各个图片的信息。因此,这是我的问题:
如何使用片段复制此功能,以便当我从片段B滑动到C并从片段B滑动到A时,我可以将适当的数据传递给它们。我目前通过我的活动这样做:
Intent a = new Intent(SlideShow.this,MapsActivity.class);
a.putExtra("long", longitude);
a.putExtra("lang", langitude);
pauseSlideShow(i, timeRemaining);
isPaused = true;
startActivity(a)
我了解了FragmentPagerAdapter
和FragmentStatePagerAdapter
之间的差异。目前,当我从B启动活动A和C时,我不会在B上调用finish()
,这样当我返回它时,它处于与之前完全相同的状态。但是,由于活动A和C支持B,当我从A或C返回活动B时,我通过分别在A和C上调用finish()
来结束它们。我怎么能用碎片做到这一点?
答案 0 :(得分:0)
如果您使用的是FragmentPagerAdapter
,请确保在getItem()
中创建片段时,您可以在适配器的某处或(最好)活动中保存对片段的引用。
在片段B上创建一个返回数据的方法(即getLatLong()
)。
在onCreateView()
的片段A中,您将从活动中获得片段B的引用,并调用getLatLong()
以获取所需的数据。
您可以通过调用viewpager.setOffscreenPageLimit(2)
将您的片段保留在内存中。这样,当您滑动到片段C时,片段A不会被销毁,因为ViewPager
将在片段C的左侧保留两个片段,即片段A和B.
另一种(可能更好的)方法是在活动开始时创建所有三个片段,并在调用getItem()
时返回相应的片段。通过执行此操作,您可以使用setTargetFragment()
和getTargetFragment()
来允许片段彼此获取数据。执行此操作时,请记住片段可能有也可能没有可用的UI,因此如果您要推送数据而不是拉动,请确保接收数据的方法检查getView() == null
。