如何访问Viewpager的片段方法?

问题描述:

我有一个内嵌Viewpager的嵌套片段。我想在Viewpager的片段之一来访问(使用MainActivity)的方法,但我只得到了最后Viewpager片段或当我使用如何访问Viewpager的片段方法?

ProfileFragment f = (ProfileFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentLayout); 
... 
Fragment f = v.getChildFragmentManager().findFragmentById(R.id.pager); 

// Doesn't even work when I use findFragmentByTag("TAG") 

不能访问的方法,其中“fragmentLayout”是容器为我的片段交易内activity_main.xml。 (目前内ProfileFragment)

这里是我嵌套我的碎片/ XML:

MainActivity 
    - fragmentLayout 
    - ProfileFragment (or LoginFragment/ChatFragment/ShopFragment/etc) 
     - xml items 
     - viewPager 
     - Fragment1 
     - Fragment2 // can't access methods in here from MainActivity 
    - navigationTabs 

我试图让从ProfileFragment的Viewpager & PageAdapter,它显示片段的正确数目,但我似乎无法访问这些方法。

接口是否可以查看?还是有更简单的方法?谢谢。

无解的工作对我来说&我实现了我的嵌套片段的接口麻烦

我最终将方法放在MainActivity中,这对我来说是最简单的解决方案。

我还可以直接从MainActivity访问嵌套片段视图与

TextView tv1 = findViewById(R.id.exampleid); 

String tag = makeFragmentName(mViewPager.getId(), getItemId(position)); 
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag); 
return fragment; 
((YourFragment)fragment).methodName(); 

试试这个

有2层简单的方法可以做到这一点:

  1. Store中你ProfileFragmentFragment1Fragment2,那么当你需要调用有功能,只需要调用fragment1.doSomeThing()从你的ProfileFragment。这种方法是确定的,当你ViewPager's adapter不要有太多的片段(在这种情况下,你应该使用WeakReference避免OOM存储您fragments`时。
  2. 使用EventBus(或LocalBroadCastReceiver,但我更喜欢EventBus),然后就可以调用从任何地方你doSomeThing()功能,与呼叫像下面:

    EventBus.getDefault().post(new CallYourFunctionObject(int value)