【问题标题】:Access a ViewPager Fragment's public method from the main Activity从主 Activity 访问 ViewPager Fragment 的公共方法
【发布时间】:2016-12-10 18:25:32
【问题描述】:

我有一个主要活动,其中 XML 包含一个 RelativeLayout 和一个 ViewPager

<android.support.v4.view.ViewPager
    android:id="@+id/pager"

然后我有一个FragmentStatePagerAdapter 来管理Fragment

现在我在 Fragment 上有一个名为 getFoo() 的公共方法(显然返回 foo)。

问题:从主Activity中获取Fragmentfoo的正确方法是什么?

我尝试在ViewPager 上使用addOnPageChangeListener(),但我无法获得Fragment 的活动实例。

【问题讨论】:

  • "尝试在 ViewPager 上使用 addOnPageChangeListener,但随后 - 无法获取 Fragment 的活动实例" - 如果您已将片段列表传递给您的 viewpager 适配器,您可以在 onPageChanged 的​​索引中检索 Fragment ()

标签: android android-fragments


【解决方案1】:

您可以扩展FragmentStatePagerAdapter,就像拥有自己的ArrayAdapter

在其中保留一个List&lt;Fragment&gt;(通过构造函数),然后使用adapter.getItem(position).getFoo()

非常简单的例子。

public MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragments;

    public MyFragmentStatePagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    public int getCount() { return fragments.size(); }
    public Fragment getItem(int position) { return fragments.get(position); }
}

【讨论】:

  • 我认为这是正确的方法。我正在使用本教程:developer.android.com/training/animation/screen-slide.html,其中的定义有点不同,但你的方法是我现在要放弃的方法。
  • 该指南会在您每次滑动到它时重新创建一个片段。这个答案提供了“保存所有片段的状态”的能力
  • 是的。我希望该应用程序创建七张幻灯片的列表(一周中的几天)。所以用户可以在它们之间滑动。如果用户“超出”周范围 - 幻灯片将被销毁并创建另外 7 张幻灯片。每个组的数据将从数据库中保存/获取。
  • 有比销毁和添加更多的更好的方法来处理持续的 ViewPager。
  • 类似于无限浏览器的东西。 7个片段添加一次,可以一直滚动。 stackoverflow.com/questions/13668588/…
猜你喜欢
  • 1970-01-01
  • 2013-07-15
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多