在ViewPager中调用Fragment中的方法

5

我有一个ViewPager,里面有一些Fragment。在创建每个Fragment时,我调用构造函数并传递该Fragment的名称:

 public KwejkFragment(String tagName)
    {
        this.fragmentTag = tagName;
    }

在MainActivity中,我当然创建了Adapter和ViewPager的实例。然后我设置了ViewPager的监听器:
mPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {

                FragmentManager fm = getSupportFragmentManager();

                Fragment fr = mAdapter.getItem(position);

                if(fr.equals(KwejkFragment.class))
                {
                    (KwejkFragment) fr.refresh(); //I'm trying to call method here for example showMeSomething() but it is unavailable.
                }

            }

这里我想要:

1)获取当前PagerView中可见的Fragment

2)调用该Fragment的指定方法

如何实现?

1个回答

9

首先将片段中的方法设为public,然后使用以下代码:

mPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {

                FragmentManager fm = getSupportFragmentManager();

                Fragment fr = mAdapter.getItem(position);

                if(fr instanceOf KwejkFragment))
                {
                     fr.refresh(); 
                }

            }

将调试器放置在刷新方法中,检查它是否被调用。

这段代码将正常工作。享受吧 :)


调用getitem()不会导致npe吗? - Jongz Puangput
默认情况下第一个片段被调用时,不会调用此函数。有什么建议吗? - Jimit Patel
你为什么创建了 FragmentManager 对象却没有使用它? - Vivek Mishra
嗨,朋友,谢谢你的回答。有一点小问题,你必须将fr fragment转换。再次感谢。 if(fr instanceof KwejkFragment)) { ((KwejkFragment) fr).refresh(); } - Muhammad Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接