0

我有3个活动,我想转换成片段,这样我可以实现ViewPager它们之间滑动:活动片段

  1. 活性A(向左)
  2. 活性B(中央)
  3. 活性C(向右)

活动B从外部活动称为和数据被传递给它的意图内。现在,活动B将意图内的数据传递到活动A和C当它们启动时。此处的想法是,B显示带有每X秒更新一次的ImageView的幻灯片,并且A和C显示有关各个图片的信息。因此,这里是我的问题:

  1. 我如何复制与片段此功能,这样,当我从轻扫片段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) 
    
  2. 我对FragmentPagerAdapterFragmentStatePagerAdapter之间的差异读了。目前,当我从B启动活动A和C时,我不会在B上调用finish(),因此当我回到它时,它的状态与以前完全相同。但是,由于活动A和C支持B,因此当我从A或C返回活动B时,我通过分别在A和C上调用finish()来结束它们。我怎样才能用碎片做到这一点?

+0

我不认为使用ViewPager是你需要的,如果意图在活动之间传递,因为所有片段都在ViewPager中加载。你需要重写没有意图的所有数据传递 –

+0

是的,我的问题是如何? – Alk

回答

0
  1. 如果使用FragmentPagerAdapter,确保当您在getItem()创建一个片段你一个参考的地方保存到片段中的适配器或(最好)的活动。

    在片段B上创建返回数据的方法(即getLatLong())。

    onCreateView()的片段A中,您将从活动中获得对片段B的引用,并调用getLatLong()来获取所需的数据。

  2. 您可以通过调用viewpager.setOffscreenPageLimit(2)来保持片段在内存中可用。当你刷到C片段这样碎片A不会被破坏,因为ViewPager将保持两种片段片段C的左侧,这是你的片段A和B.

另一个(可能更好)方法是在活动开始时创建所有三个片段,并在调用getItem()时返回适当的片段。通过这样做,您可以使用setTargetFragment()getTargetFragment()来允许片段相互获取数据。当你这样做的时候,请记住一个片段可能有或没有可用的UI,所以如果你推动数据而不是拉动数据,确保接收数据的方法检查getView() == null