对碎片的活动

时间:2016-03-06 05:27:59

标签: java android android-fragments android-intent android-viewpager

我有3个活动要转换成片段,以便我可以实现ViewPager在它们之间滑动:

  1. 活动A(左侧)
  2. 活动B(中央)
  3. 活动C(右侧)
  4. 从外部活动调用活动B,并在Intent中将数据传递给它。现在,活动B在意图内将数据传递给活动A和C。这里的想法是B显示带有ImageView的幻灯片,每隔X秒更新一次,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()来结束它们。我怎么能用碎片做到这一点?

1 个答案:

答案 0 :(得分:0)

  1. 如果您使用的是FragmentPagerAdapter,请确保在getItem()中创建片段时,您可以在适配器的某处或(最好)活动中保存对片段的引用。

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

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

  2. 您可以通过调用viewpager.setOffscreenPageLimit(2)将您的片段保留在内存中。这样,当您滑动到片段C时,片段A不会被销毁,因为ViewPager将在片段C的左侧保留两个片段,即片段A和B.

  3. 另一种(可能更好的)方法是在活动开始时创建所有三个片段,并在调用getItem()时返回相应的片段。通过执行此操作,您可以使用setTargetFragment()getTargetFragment()来允许片段彼此获取数据。执行此操作时,请记住片段可能有也可能没有可用的UI,因此如果您要推送数据而不是拉动,请确保接收数据的方法检查getView() == null