Java 活动到碎片

Java 活动到碎片,java,android,android-fragments,android-intent,android-viewpager,Java,Android,Android Fragments,Android Intent,Android Viewpager,我有3个活动,我想将它们转换为片段,以便实现一个ViewPager在它们之间滑动: 活动A(左侧) 活动B(中央) 活动C(右侧) 从外部活动调用活动B,并在Intent中向其传递数据。现在,活动B在活动A和C启动时将意向中的数据传递给活动A和C。这里的想法是,B显示一个幻灯片,其中的ImageView每X秒更新一次,A和C显示有关各个图片的信息。因此,我的问题如下: 如何使用片段复制此功能,以便在从片段B滑动到C以及从片段B滑动到A时,可以将适当的数据传递给它们。我目前在我的活动中是这样做的:

我有3个活动,我想将它们转换为片段,以便实现一个ViewPager在它们之间滑动:

  • 活动A(左侧)
  • 活动B(中央)
  • 活动C(右侧)
  • 从外部活动调用活动B,并在Intent中向其传递数据。现在,活动B在活动A和C启动时将意向中的数据传递给活动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()
    ,因此当我返回到B时,它的状态与以前完全相同。然而,由于活动A和C支持B,当我从A或C返回到活动B时,我分别对A和C调用
    finish()
    ,以结束它们。我如何处理碎片

  • 如果您使用的是
    FragmentPagerAdapter
    ,请确保在
    getItem()
    中创建片段时,将对片段的引用保存在适配器或(最好)活动中的某个位置

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

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

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


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

    我不认为在活动之间传递意图时使用ViewPager是必要的,因为所有片段都加载在ViewPager中。你需要在没有意图的情况下重写所有的数据传递是的,我的问题是怎么做?