如何访问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层简单的方法可以做到这一点:
- Store中你
ProfileFragment
Fragment1
和Fragment2
,那么当你需要调用有功能,只需要调用fragment1.doSomeThing()
从你的ProfileFragment
。这种方法是确定的,当你ViewPager's adapter
不要有太多的片段(在这种情况下,你应该使用WeakReference
避免OOM存储您fragments`时。 -
使用EventBus(或
LocalBroadCastReceiver
,但我更喜欢EventBus
),然后就可以调用从任何地方你doSomeThing()
功能,与呼叫像下面:EventBus.getDefault().post(new CallYourFunctionObject(int value)